OpenCV 取像素颜色值
OpenCV take pixel color values
我知道有很多类似的问题,但出于某种原因我似乎找不到我要找的东西。我需要获取 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];
我推荐你
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
}
祝一切顺利
你的功能是正确的。只是检查一下你没有得到,例如 i,j
交换。第一个索引是 行 。请参阅示例 here。
还要检查的另一件事:blue1、green1、red1 的类型是什么?应该是unsigned char
、a.k.a。 uint8_t
,或等价物。如果这样做,您应该小心如何在 std::cout
上打印值(需要强制转换为 int
)。
我知道有很多类似的问题,但出于某种原因我似乎找不到我要找的东西。我需要获取 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];
我推荐你
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
}
祝一切顺利
你的功能是正确的。只是检查一下你没有得到,例如 i,j
交换。第一个索引是 行 。请参阅示例 here。
还要检查的另一件事:blue1、green1、red1 的类型是什么?应该是unsigned char
、a.k.a。 uint8_t
,或等价物。如果这样做,您应该小心如何在 std::cout
上打印值(需要强制转换为 int
)。