网站大量收购独家精品文档,联系QQ:2885784924

OpenCV处理图像的基础知识.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenCV处理图像的基础知识

【OpenCV】访问图像中每个像素的值 IplImage是OpenCV中CxCore部分基础的数据结构,用来表示图像,其中Ipl是Intel Image Processing Library的简写。以下是IplImage的结构分析来自OpenCV中文网站:/index.php/Cxcore%E5%9F%BA%E7%A1%80%E7%BB% 93%E6%9E%84#IplImage 假设你要访问第k通道、第i行、第j列的像素。 直接访问 对我们来说比较重要的两个元素是:char *imageData以及widthStep。imageData存放图像像素数据,而widStep类似CvMat中的step,表示以字节为单位的行数据长度。 一个m*n的单通道字节型图像,其imageData排列如下: 如果我们要遍历图像中的元素,只需: 对于单通道字节型图像 for(i=0,iheight,i++) for(j=0,jwidth,j++) IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); ((uchar *)(img-imageData + i*img-widthStep))[j]=111; /指向第i行的起始位置 对于多通道字节型图像IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3); ((uchar *)(img-imageData + i*img-widthStep))[j*img-nChannels + 0]=111; // B ((uchar *)(img-imageData + i*img-widthStep))[j*img-nChannels + 1]=112; // G ((uchar *)(img-imageData + i*img-widthStep))[j*img-nChannels + 2]=113; // R 对于多通道浮点型图像: IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); ((float *)(img-imageData + i*img-widthStep))[j*img-nChannels + 0]=111; // B ((float *)(img-imageData + i*img-widthStep))[j*img-nChannels + 1]=112; // G ((float *)(img-imageData + i*img-widthStep))[j*img-nChannels + 2]=113; // R 现在,一般的情况下,假设有N-通道,类型为T的图像: I(i,j)c ~ ((T*)(img-imageData + img-widthStep*i))[j*N + c] 基于指针的直接访问:(简单高效) 这种直接访问的方法速度快,但容易出错,我们可以通过定义指针来访问。即: IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); int height = img-height; int width = img-width; int step = img-widthStep/sizeof(uchar); uchar* data = (uchar *)img-imageData; data[i*step+j] = 111; 而多通道(三通道)字节图像中,imageData排列如下: 其中(Bi,Bj)(Gi,Gj)(Ri,Rj)表示图像(i,j)处BGR分量的值。使用指针的遍历方法如下: IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3); int height = img-height; int width = img-width; int step = img-widthStep/sizeof(uchar); int channels = img-nChannels; uchar* data = (uchar *)img-imageData; data[i*step+j*channels+k] = 111; 对于多通道浮点型图像假设图像数据采用 4字节32 位行对齐方式IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); int height = img-he

您可能关注的文档

文档评论(0)

youshen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档