1. 程式人生 > >opencv對影象的簡單操作

opencv對影象的簡單操作

1、影象的縮放

// mat型別的資料到lplimage型別進行轉換,然後縮放

        Mat Img01 = imread("4.bmp");

        IplImage* pDstImage;

IplImage DesImg = Img01;
IplImage *inputDesImg = cvCloneImage(&DesImg);

double fScale = 0.314;      //縮放倍數  
CvSize czSize;              //目標影象尺寸  

//計算目標影象大小  
czSize.width = inputDesImg->width * fScale;
czSize.height = inputDesImg->height * fScale;
//建立影象並縮放  
pDstImage = cvCreateImage(czSize, inputDesImg->depth, inputDesImg->nChannels);
cvResize(inputDesImg, pDstImage, CV_INTER_AREA);
//建立視窗  
cvNamedWindow("ssss", CV_WINDOW_AUTOSIZE);
cvShowImage("ssss", inputDesImg);
//建立視窗  
cvNamedWindow("11", CV_WINDOW_AUTOSIZE);

cvShowImage("11", pDstImage);

2、影象的旋轉

void CTestShowImageDlg::RotateSrcImage(cv::Mat& m_SrcRotateImage, float angle, cv::Mat& m_OutDesRotateImage)
{
////第一種旋轉方法
m_OutDesRotateImage.size() = m_SrcRotateImage.size();
cv::Size src_sz = m_SrcRotateImage.size();
cv::Size dst_sz(src_sz.height, src_sz.width);


//指定旋轉中心
cv::Point2f centre(m_SrcRotateImage.cols / 2., m_SrcRotateImage.rows / 2.);
//獲取旋轉矩陣(2*3矩陣)
cv::Mat rot_mat = cv::getRotationMatrix2D(centre, angle, 1.);
cv::Rect bbox = cv::RotatedRect(centre, m_SrcRotateImage.size(), angle).boundingRect();


rot_mat.at<double>(0, 2) += bbox.width / 2.0 - centre.x;
rot_mat.at<double>(1, 2) += bbox.height / 2.0 - centre.y;


//根據旋轉矩陣進行仿射變換
cv::warpAffine(m_SrcRotateImage, m_OutDesRotateImage, rot_mat, dst_sz,0);


//第二種旋轉方法
//m_OutDesRotateImage = Mat::zeros(m_SrcRotateImage.cols, m_SrcRotateImage.rows, CV_8UC3);
//float anglePI = (float)(angle * CV_PI / 180);
//int xSm, ySm;
//for (int i = 0; i < m_OutDesRotateImage.rows; i++)
//for (int j = 0; j < m_OutDesRotateImage.cols; j++)
//{
// xSm = (int)((i - m_OutDesRotateImage.rows / 2)*cos(anglePI) - (j - m_OutDesRotateImage.cols / 2)*sin(anglePI) + 0.5);
// ySm = (int)((i - m_OutDesRotateImage.rows / 2)*sin(anglePI) + (j - m_OutDesRotateImage.cols / 2)*cos(anglePI) + 0.5);
// xSm += m_SrcRotateImage.rows / 2;
// ySm += m_SrcRotateImage.cols / 2;
// if (xSm >= m_SrcRotateImage.rows || ySm >= m_SrcRotateImage.cols || xSm <= 0 || ySm <= 0){
// m_OutDesRotateImage.at<Vec3b>(i, j) = Vec3b(0, 0);
// }
// else{
// m_OutDesRotateImage.at<Vec3b>(i, j) = m_SrcRotateImage.at<Vec3b>(xSm, ySm);
// }
//}
}

3、影象中新增文字

cv::mat RoI;

string str = "1';

 cv::putText(ROI, str, cv::Point(10, 10), cv::FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar(0, 255, 0), 2);