Conversion of CvGet2D

Conversion of CvGet2D

本文关键字:CvGet2D of Conversion      更新时间:2023-10-16

我有以下内容: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依赖并以另一种方式改变它。

有什么建议吗?

您可以使用

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];
       }
     }

有关更多详细信息,请参阅此堆栈溢出问题