我有以下内容: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依赖关系并以另一种方式改变它。
有什么建议吗?
答案 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