如何在openCV中访问某个像素的RGB值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (951)

如何在OpenCV中获取/设置(都)某些(由x,y坐标给定的)像素的RGB值?重要的是 - 我用C ++编写,图像存储在cv :: Mat变量中。我知道有一个IplImage()运算符,但IplImage在使用中并不是很舒服。我知道在OpenCV 2.2线程中已经有了这个Pixel访问权限,但它只是关于黑白位图。

提问于
用户回答回答于
cv::Mat image = ...do some stuff...;

image.at<cv::Vec3b>(y,x);给出RGB(它可能以BGR的形式排序)类型的向量。cv::Vec3b

image.at<cv::Vec3b>(y,x)[0] = newval[0];
image.at<cv::Vec3b>(y,x)[1] = newval[1];
image.at<cv::Vec3b>(y,x)[2] = newval[2];
用户回答回答于

低级方法是直接访问矩阵数据。

在RGB图像中(我相信OpenCV通常以BGR的形式存储),并假设调用了cv :: Mat变量,则frame可以通过以下方式在位置(xy)(从左上角)获取蓝色值:

frame.data[frame.channels()*(frame.rows*y + x)];

同样,要获得B,G和R:

uchar b = frame.data[frame.channels()*(frame.cols*y + x) + 0];    
uchar g = frame.data[frame.channels()*(frame.cols*y + x) + 1];
uchar r = frame.data[frame.channels()*(frame.cols*y + x) + 2];

请注意,此代码假定步幅等于图像的宽度。

扫码关注云+社区

领取腾讯云代金券