Opencv遍历每个像素点

标签:
it技术文档 |
分类: 技术文档 |
1.使用cvGet2D()函数访问:
vScalar cvGet1D( const CvArr* arr, int idx0 ); CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 ); CvScalar cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 ); CvScalar cvGetND( const CvArr* arr, int* idx );
-
nChannels; -
alphaChannel; -
depth; -
colorModel[4]; -
channelSeq[4]; -
dataOrder; -
origin; -
align; -
width; -
height; -
_IplROI *roi; -
_IplImage *maskROI; -
*imageId; -
_IplTileInfo *tileInfo; -
imageSize; -
*imageData; -
widthStep; -
BorderMode[4]; -
BorderConst[4]; -
*imageDataOrigin;
比较重要的两个元素是:char *imageData以及widthStep。imageData存放图像像素数据,而widStep类似CvMat中的step,表示以字节为单位的行数据长度。
多通道(三通道)字节图像中,imageData排列如下:
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
uchar* data=(uchar *)img->imageData;
int step =
img->widthStep/sizeof(uchar);
int channels =
img->nChannels;
uchar *b,*g,*r;
for(int i=0;iheight;i++)
i*step
j*chanels+0
j*channels+1
虽然第一种跟第二种的时间复杂度是相同的。但是第二种的速度明显比第一种快很多。
追求速度就选用第二种!
本文参考http://blog.csdn.net/xiaowei_cqu/article/details/7557063