练习:使用ImageROI来增加某范围的像素
#include "cv.h"
#include "highgui.h"
int main(int argc,char **argv)
{
IplImage *src,*dst;
if(argc==7 &&((src=cvLoadImage(argv[1],1))!=0))
{
dst=cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
cvCopy(src,dst,NULL);
//一共7个参数,第一个为编译好的程序,第二个为需要载入的图片,第三个即x坐标,依次类推
int x=atoi(argv[2]);
int y=atoi(argv[3]);
int width=atoi(argv[4]);
int height=atoi(argv[5]);
int add=atoi(argv[6]);
//这个函数是调整目标图像和原图像尺寸精确匹配
cvResize(src,dst);
/*置感兴趣区域,这里其实只设置了dst的感兴趣区域,然后把目标图像的感兴趣区域加上某一像素值。并没有实现从原图像感兴趣区域到目标图像感兴趣区域的某范围 像素的增加,下面有具体的说明*/
cvSetImageROI(dst,cvRect(x,y,width,height));
CvScalar s=cvScalar(0,add,0);
cvAddS(dst,s,dst);//注意此处参数部分和下面有何不同
cvResetImageROI(dst);
cvNamedWindow("Roi",1);
cvNamedWindow("Roi_Add",1);
cvShowImage("Roi",src);
cvShowImage("Roi_Add",dst);
cvWaitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&dst);
cvDestroyWindow("Roi");
cvDestroyWindow("Roi_Add");
}
return 0;
}
/*这是在vc下编写成功后,我们利用dos,运行编译成功后的文件,截图中有运行参数的设置*/
运行结果
上面设置感兴趣区域部分解释:
如果我们想只对原图和目标图像中的感兴趣区域进行操作,可将上面红色部分代码修改如下
cvSetImageROI(src,cvRect(x,y,width,height));
cvSetImageROI(dst,cvRect(x,y,width,height));
CvScalar s=cvScalar(0,add,0);
cvAddS(src,s,dst);//参数变为原图和目标图像
cvResetImageROI(dst);//取消感兴趣区域
cvResetImageROI(src);
这样做虽然结果没有变化,但是实际进行操作时,是只对我们设置的区域进行了操作。细心调试会发现,当我们屏蔽掉cvResetImageROI(dst); cvResetImageROI(src);这两句的时候,运行结果如下: