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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值