【发布时间】:2016-03-07 14:00:30
【问题描述】:
我正在处理视频图像,我想检测视频是否包含某个红色范围内的任何像素。这可能吗?
这是我根据教程改编的代码:
#ifdef __cplusplus
- (void)processImage:(Mat&)image;
{
cv::Mat orig_image = image.clone();
cv::medianBlur(image, image, 3);
cv::Mat hsv_image;
cv::cvtColor(image, hsv_image, cv::COLOR_BGR2HSV);
cv::Mat lower_red_hue_range;
cv::Mat upper_red_hue_range;
cv::inRange(hsv_image, cv::Scalar(0, 100, 100), cv::Scalar(10, 255, 255), lower_red_hue_range);
cv::inRange(hsv_image, cv::Scalar(160, 100, 100), cv::Scalar(179, 255, 255), upper_red_hue_range);
// Interpret values here
}
解读价值观
我想检测 inRange 操作的结果是否为零。换句话说,我想了解原始图像中是否有任何匹配的像素,其颜色范围为给定的红色下限和上限。如何解释结果?
【问题讨论】:
-
首先你需要 OR 上下掩码。然后你可以
countNonZero看看是否有非零像素(即你发现了什么)。最好先应用形态学侵蚀或开放来去除小的(可能是嘈杂的)斑点,或者找到连接的组件(findContours,connectedComponentsWithStats)并根据某些标准进行修剪/搜索 -
谢谢。我知道这很蹩脚,但你能添加一些示例代码吗?这是我的第一个 OpenCV 测试项目,我正在努力在这么短的时间内熟悉所有这些功能和概念..
-
我发布了一个答案。这应该让你开始。如果您有更精确的要求,请将它们添加到您的问题中,我会尽力做出更准确的答案。
标签: c++ opencv feature-detection color-detection