我已经彻底搜索了互联网和stackoverflow,但我没有找到我的问题的答案:
如何在OpenCV中获取/设置(两者)某些(由x,y坐标给定)像素的RGB值?重要的是 - 我用C++编写,图像存储在cv :: Mat变量中.我知道有一个IplImage()运算符,但IplImage在使用中不是很舒服 - 据我所知它来自C API.
是的,我知道在OpenCV 2.2线程中已经有这个Pixel访问,但它只是关于黑白位图.
编辑:
非常感谢您的所有答案.我看到有很多方法来获取/设置像素的RGB值.我从亲密的朋友那里得到了一个想法 - 谢谢Benny!这非常简单有效.我认为这是一个你选择的品味问题.
Mat image;
(......)
Point3_<uchar>* p = image.ptr<Point3_<uchar> >(y,x);
然后你可以读取/写入RGB值:
p->x //B
p->y //G
p->z //R
Boa*_*oaz 90
请尝试以下方法:
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];
aar*_*rkk 16
低级方式是直接访问矩阵数据.在RGB图像中(我相信OpenCV通常存储为BGR),并假设您的cv :: Mat变量被调用frame,您可以通过这种方式获取位置(x,y)(从左上角)的蓝色值:
frame.data[frame.channels()*(frame.cols*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];
请注意,此代码假定步幅等于图像的宽度.