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);