opencv练习题3-6

练习3-5: 为一个图像创建多个图像头。读取一个大小至少为100×100的图像。另创建两个图像头并设置它们的origion,depth,nChannels和widthStep属性同之前读取的图像一样。在新的图像头中,设置宽度为20,高度为30。最后,将imageData指针分别指向像素(5,10)和(50,60)像素位置。传递这两个新的图像头给cvNot()。最后显示最初读取的图像,在那个大图像中应该有两个矩形,矩形内的值是原始值的求反值。  


#include "cv.h"
#include "highgui.h"

int main()
{
	 IplImage *src=cvLoadImage("lena.jpg");
	 IplImage *dst1,*dst2;

	 dst1=cvCreateImage(cvSize(20,30),src->depth,src->nChannels);
	 dst1->origin=src->origin;
	 dst1->widthStep=src->widthStep;

	 dst2=cvCreateImage(cvSize(20,30),src->depth,src->nChannels);
	 dst2->origin=src->origin;
	 dst2->widthStep=src->widthStep;
	 dst1->imageData=src->imageData+10*src->widthStep+5*src->nChannels;
	 dst2->imageData=src->imageData+60*src->widthStep+50*src->nChannels;
	 cvNot(dst1,dst1);
	 cvNot(dst2,dst2);
	 

	 cvNamedWindow("src",1);
	 cvShowImage("src",src);
	 cvWaitKey(0);

	 cvReleaseImage(&src);
	 cvReleaseImage(&dst1);
	 cvReleaseImage(&dst2);
	 cvDestroyWindow("src");
	 return 0;
}
说明:dst1 ->imageData = src->imageData + 10 * src->widthStep + 5 *  src->nChannels;

这句话的执行程序为:
imagedata指针是字节类型的指针,包含一个指向第一行图像数据的指针; widthStep是相邻行同列点之间的字节数;
所以src->imageData + 10 * src->widthStep就是指向了第10行起始点的图像数据;
由于图像不是单通道的, 所以   src->imageData + 10 * src->widthStep + 5 *  src->nChannels就指向了像素点(5,10)的位置。

程序执行结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值