使用opencv访问mask的像素值
Access pixel value of mask using opencv
我遇到了一个问题,我需要访问 opencv Mat 图像容器的像素。
我使用 opencv inRange 函数创建一个掩码。在那个掩码中我需要检查不同像素的值,但我不会收到我期望收到的值。
// convert image to hsv for better color-detection
cv::Mat img_hsv, maskR, maskY, mask1, mask2;
cv::cvtColor(image, img_hsv, cv::COLOR_BGR2HSV);
// Gen lower mask (0-5) and upper mask (175-180) of RED
cv::inRange(img_hsv, cv::Scalar(0, 50, 20), cv::Scalar(5, 255, 255), mask1);
cv::inRange(img_hsv, cv::Scalar(175, 50, 20), cv::Scalar(180, 255, 255), mask2);
// Merge the masks
cv::bitwise_or(mask1, mask2, maskR);
在那之后,我尝试读取像素值,在那里我得到了极高的值甚至 nans,但其中大部分为零,这是预期的,因为蒙版只有黑白
if (maskR.at<double>(position.x, position.y) == 255)
有什么我想念的吗?我尝试使用 double、uchar、int 和 float
当我打印掩码时,我可以清楚地看到 0 和 255 条目(没有 nans 或奇怪的数字),但是当我使用 at() 函数访问它们时,我不会得到相同的结果。
像素的坐标应在 Mat 的范围内,因为蒙版的尺寸为 1080x1920,并且没有坐标超出该范围。
我使用 cv::size
得到了维度
我终于找到了自己问题的答案。
当我使用 uchar 时有效:
maskR.at<uchar>(position.x, position.y) == 255
我认为这行不通,因为用 std::cout
打印它不会给我输出,但原因是我忘记转换 uchar 以便它可以在控制台中打印
我遇到了一个问题,我需要访问 opencv Mat 图像容器的像素。 我使用 opencv inRange 函数创建一个掩码。在那个掩码中我需要检查不同像素的值,但我不会收到我期望收到的值。
// convert image to hsv for better color-detection
cv::Mat img_hsv, maskR, maskY, mask1, mask2;
cv::cvtColor(image, img_hsv, cv::COLOR_BGR2HSV);
// Gen lower mask (0-5) and upper mask (175-180) of RED
cv::inRange(img_hsv, cv::Scalar(0, 50, 20), cv::Scalar(5, 255, 255), mask1);
cv::inRange(img_hsv, cv::Scalar(175, 50, 20), cv::Scalar(180, 255, 255), mask2);
// Merge the masks
cv::bitwise_or(mask1, mask2, maskR);
在那之后,我尝试读取像素值,在那里我得到了极高的值甚至 nans,但其中大部分为零,这是预期的,因为蒙版只有黑白
if (maskR.at<double>(position.x, position.y) == 255)
有什么我想念的吗?我尝试使用 double、uchar、int 和 float
当我打印掩码时,我可以清楚地看到 0 和 255 条目(没有 nans 或奇怪的数字),但是当我使用 at() 函数访问它们时,我不会得到相同的结果。
像素的坐标应在 Mat 的范围内,因为蒙版的尺寸为 1080x1920,并且没有坐标超出该范围。
我使用 cv::size
得到了维度我终于找到了自己问题的答案。
当我使用 uchar 时有效:
maskR.at<uchar>(position.x, position.y) == 255
我认为这行不通,因为用 std::cout
打印它不会给我输出,但原因是我忘记转换 uchar 以便它可以在控制台中打印