使用ImageROI来增加某范围的像素

练习:使用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);这两句的时候,运行结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值