【发布时间】:2012-03-13 07:32:16
【问题描述】:
如何访问 IplImage(单通道和 IPL_DEPTH_8U 深度)的 元素。
我想更改图像特定 (x, y) 位置的像素值。
【问题讨论】:
如何访问 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)
【讨论】: