首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用opencv访问掩码的像素值

使用opencv访问掩码的像素值
EN

Stack Overflow用户
提问于 2022-01-19 21:36:10
回答 1查看 892关注 0票数 0

我遇到了一个问题,我需要访问opencv Mat图像容器的像素。我使用opencv inRange函数创建一个掩码。在这个掩码中,我需要检查不同像素的值,但是我不会接收我期望接收的值。

代码语言:javascript
复制
// 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,但是它们中的大多数都是零,这是因为掩码只是黑白的。

代码语言:javascript
复制
if (maskR.at<double>(position.x, position.y) == 255) 

我遗漏了什么吗?我试过双份,布哈尔,int和浮点数。

当我打印掩码时,我可以清楚地看到0和255项(没有nans或奇怪的数字),但是当我使用at()函数访问它们时,就不会得到相同的结果。

像素的坐标应该在Mat的范围内,因为掩码的尺寸是1080x1920,而非坐标达到这个范围。

我通过使用cv::size获得维度

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-20 07:30:01

我终于找到了我自己问题的答案。

当我使用uchar时,它是有效的:

代码语言:javascript
复制
maskR.at<uchar>(position.x, position.y) == 255

我认为这不起作用,因为用std::cout打印这个不能给我输出,但原因是我忘记了抛出uchar,所以它可以在控制台中打印。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70778047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档