cvSetImageROI 和 cv::Mat.copyTo 和 addWeighted

来源:互联网 发布:av天堂最新域名多少 编辑:程序博客网 时间:2024/06/07 11:14
功能:
基于给定的矩形设置图像的ROI(感兴趣区域,region of interesting)
格式:
void cvSetImageROI(IplImage* image,CvRect rect);
参数
image 图像头,待处理图像
rect ROI 矩形
说明:
如果ROI为NULL并且参数rect的值不等于整个图像,则ROI被分配。大多数OpenCV函数都支持ROI,并将它作为一个独立图像进行处理,所有像素坐标都是从ROI的左上角或者左下角(基于图像结构)开始计算的。
比如:
IplImage *img1=cvLoadImage("1.jpg");
cvSetImageROI(img1,cvRect(100,100,356,156));//设置img1的ROI区域
之后显示img1图像是只显示ROI标识的一部分,即改变了指针img1,但是它仍旧保留有原来图像的信息,在执行这一句cvResetImageROI(img1);之后,img1指示原来的图像信息。执行下面的例子即可明了显示。
实例;
IplImage *img1=cvLoadImage("1.jpg");
cvSetImageROI(img1,cvRect(100,100,356,156));
IplImage *image1 = img1;
cvShowImage("image1",image1);
cvResetImageROI(img1);
IplImage *image2 = img1;
cvShowImage("image2",image2);
cvWaitKey(0);
cvDestroyAllWindows();



示例2:

IplImage * pImage1 = cvLoadImage("H:\\opencvBK.bmp" );
IplImage * pImage2 = cvLoadImage("H:\\opencvIn.bmp" );


cv::Mat iamgeBK( pImage1 );
cv::Mat imageIn( pImage2 );

cv::Mat imageROI = iamgeBK( cv::Rect( 10, 10, imageIn.cols, imageIn.rows ) );

imageIn.copyTo(imageROI);

cv::namedWindow("result");
cv::imshow("result",iamgeBK);
cv::waitKey(); 

还可以参考这篇文章

Opencv 图像叠加 添加水印

 http://www.cnblogs.com/mfryf/archive/2012/03/08/2385304.html
和这篇文章:

ROI区域图像叠加&初级图像混合 全剖析
http://blog.csdn.net/huang9012/article/details/21811715
0 0