opencv练习题3-6

来源:互联网 发布:linux新建目录权限命令 编辑:程序博客网 时间:2024/06/06 09:37

练习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)的位置。

程序执行结果如下:



0 0
原创粉丝点击