转换CvGet2D

时间:2013-09-30 15:48:37

标签: c++ visual-studio-2010 opencv

我有以下内容:img是HeightXWidth的IplImage。有三个渠道 我想在一个图像中访问像素的三个值,使用另一个解决方案而不是我做的下一个:

IplImage* img=cvCreateImage(...);
...
CvScalar scalar= cvGet2D(img, i, j); //where i and j are the coordinates of the considered pixel

double v0=scalar.val[0];
double v1=scalar.val[1];
double  v2=scalar.val[2];

我的想法是摆脱OpenCV依赖关系并以另一种方式改变它。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以使用CV_IMAGE_ELEM来访问x,y坐标(如

)的像素
CV_IMAGE_ELEM( image_header, elementtype, y, x*N+C ) 

例如,如果你想用i,j访问IplImage * img(3频道)的第二个频道,你可以拥有

CV_IMAGE_ELEM(img, uchar, y, (x * 3) + 1))

或使用以下方法访问r,g,b像素值

int col, row, z;
     uchar b, g, r;
     for( y = 0; row < img->height; y++ )
     {
       for ( col = 0; col < img->width; col++ )
       {
         //for( z = 0; z < img->nChannels; z++ )
         //{
         //   c = img->imageData[img->widthStep * row + col * img->nChannels + z];
         //}
         b = img->imageData[img->widthStep * row + col * 3]
         g = img->imageData[img->widthStep * row + col * 3 + 1];
         r = img->imageData[img->widthStep * row + col * 3 + 2];
       }
     }

有关详细信息,请参阅此Stack-overflow question