如何访问 IplImage 的元素(单通道和IPL_DEPTH_8U深度)。
我想更改图像特定(x,y)位置的像素值。
答案 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)