openCV入门----cvSetimageROI函数的使用

    上一次介绍了多图像单窗口的使用,其中很重要甚至可以说是至关重要的一步就是cvSetimageROI函数以及其他函数配合使用的地方!代码如下(详细请参考“openCV入门----单窗口多图片显示”博客):

cvSetImageROI(DispImage, cvRect(x, y, (int)(w / scale), (int)(h / scale)));
// Resize the input image and copy the it to the Single Big Image
cvResize(img, DispImage);
// Reset the ROI in order to display the next image
cvResetImageROI(DispImage);
详细解释如下:

1>使用cvSetImageROI函数先将整个图像截取一部分作为你所感兴趣的矩形部分,也就是第N张图片所在的位置(其输入信息包括举行起始点坐标和长、宽),将这个区域赋给DispImage对象进行暂存;

2>使用cvResize函数将img对象按照DispImage(此时是你定义的感兴趣的区域)进行调整(包括图像和大小),使得两者相匹配。也就是说,此时img也就是ROI了,目标图片也就因此放置到了整张图像上去(注意:这里不是只调整大小,而且还调整了图像,两者相互匹配!!!!);

3>使用cvResetImageROI函数释放DispImage所暂存的ROI区域,方便下次继续操作。

以上就是详细地逻辑步骤!

 

那么我们可以来针对cvSetImageROI函数或者说是这一系列配套函数,做一个类似于图片截取的功能程序!

代码如下:

#include<iostream>
#include"cv.h"
#include"highgui.h"
#include"cxcore.h"
using namespace std;
/*
做一个类似于截图的程序
*/
int main()
{
 // 隐藏 console 窗口
 //#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")

 //首先载入一幅图像
 IplImage* img = cvLoadImage("8.png");
 //提取出img原图中的ROI区域作为“截图”区域
 cvSetImageROI(img, cvRect(10, 10, 200, 200));

 //创建一张空的新图像来承载ROI区域图像
 IplImage* dst = cvCreateImage(cvSize(200,200),8,3);
 cvResize(img, dst);
 //cvCopy(img, dst);
 //取消ROI区域设置,恢复img
 cvResetImageROI(img);

 //显示图像
 cvNamedWindow("scr", CV_WINDOW_AUTOSIZE);
 cvNamedWindow("dst", CV_WINDOW_AUTOSIZE);
 cvShowImage("scr", img);
 cvShowImage("dst", dst);
 cvWaitKey(5000);
 system("pause");
 cvDestroyWindow("scr");
 cvDestroyWindow("dst");
 cvReleaseImage(&img);
 cvReleaseImage(&dst);
 return 0;
}
结果:


openCV入门----cvSetimageROI函数的使用_第1张图片
 

上述代码的具体设计思路正如上文所述的三个步骤,这里不再赘述!

一个简单的截图效果就出来了!

你可能感兴趣的:(openCV入门----cvSetimageROI函数的使用)