OpenCV采用像素颜色值

时间:2015-02-16 11:19:38

标签: c++ opencv

我知道有很多类似的问题,但由于某种原因,我似乎无法找到我想要的东西。我需要取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];

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
 }

一切顺利