我知道有很多类似的问题,但由于某种原因,我似乎无法找到我想要的东西。我需要取RGB(Open_cv中的BGR)值。我试过的,我相信是错误的(因为使用滴管工具找到的值,我的程序中从未出现过jpeg图像的一个随机像素值)。代码:
cv::Vec3b intensity;
intensity = img1.at<cv::Vec3b>(i, j);
blue1 = intensity.val[0];
green1 = intensity.val[1];
red1 = intensity.val[2];
答案 0 :(得分:1)
你的功能是正确的。只是检查一下你没有得到,例如i,j
换了。第一个索引是行。请参阅示例here。
要检查的另一件事:blue1,green1,red1的类型是什么?应为unsigned char
,a.k.a。uint8_t
或同等身份。如果你这样做,你应该小心如何在std::cout
上打印值(需要转换为int
)。
答案 1 :(得分:-1)
我建议你
cv::Mat image; //Some image
uint8_t r,g,b;
if (image.channels() == 1) { // gray-level image
g=image.at<uchar>(j,i);
} else if (image.channels() == 3) { // RGB color image
r=image.at<cv::Vec3b>(j,i)[0];//R
b=image.at<cv::Vec3b>(j,i)[1];//B
g=image.at<cv::Vec3b>(j,i)[2];//G
}
一切顺利