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 );
-
intnChannels; -
intalphaChannel; -
intdepth; -
charcolorModel[4]; -
charchannelSeq[4]; -
intdataOrder; -
intorigin; -
intalign; -
intwidth; -
intheight; -
struct_IplROI *roi; -
struct_IplImage *maskROI; -
void*imageId; -
struct_IplTileInfo *tileInfo; -
intimageSize; -
char*imageData; -
intwidthStep; -
intBorderMode[4]; -
intBorderConst[4]; -
char*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

加载中…