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

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

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

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

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

第二个参数是类型

像素存储在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 

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

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

 CV_IMAGE_ELEM( image_header, elemtype, y, x_Nc ) 

在你的情况下,图像是单通道。所以你可以得到i,j像素值

 CV_IMAGE_ELEM(image, unsigned char, i, j)