如何在Opencv中访问单通道IplImage的元素

时间:2012-03-13 07:32:16

标签: c++ c opencv

如何访问 IplImage 元素(单通道和IPL_DEPTH_8U深度)。

我想更改图像特定(x,y)位置的像素值。

3 个答案:

答案 0 :(得分:5)

opencv提供CV_IMAGE_ELEM方法来访问IplImage的元素,它是一个宏,

define CV_IMAGE_ELEM( image, elemtype, row, col )       \
    (((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])

第二个参数是

的类型

答案 1 :(得分:3)

像素存储在imageData数组中。 因此,由于您的图片是单一频道,您只需要这样做:

myimage.imageData[y*myimage.width+x] = 100;

这确保了imageData与缓冲区开头的正确偏移,并​​且它比任何其他指针代数操作更具可读性。

在N通道图像中,足以将N乘以数组偏移量,并添加要读取的通道数:

即。对于RGB图像

myimage.imageData[3*(y*myimage.width+x)+0] = 100; //Red
myimage.imageData[3*(y*myimage.width+x)+1] = 100; //Green
myimage.imageData[3*(y*myimage.width+x)+2] = 100; //Blue

可以根据您必须达到的目标,进行任何避免将数据乘以获得索引的优化。

答案 2 :(得分:2)

获取像素值的快速方法是使用宏。

CV_IMAGE_ELEM( image_header, elemtype, y, x_Nc ) 

在你的情况下,Image是单通道。所以你可以通过

得到i,j像素值
CV_IMAGE_ELEM(image, unsigned char, i, j)