首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV颜色提取在iOS中的应用

OpenCV颜色提取在iOS中的应用
EN

Stack Overflow用户
提问于 2014-08-03 16:13:43
回答 1查看 673关注 0票数 1

我有一个CvVideoCamera,我试图检测每个帧中的蓝色,输出帧应该只包含蓝色对象,比如这里。我是在委托方法中这样做的:

代码语言:javascript
复制
- (void)processImage:(cv::Mat&)image
{
    cv::Mat bgrMat;
    cvtColor(image, bgrMat, CV_BGRA2BGR);

    // Covert color space to HSV
    cv::Mat hsvMat;
    cvtColor(bgrMat, hsvMat, CV_BGR2HSV);

    // Threshold the HSV image
    cv::Mat blueMask;

    cv::Scalar lower_blue(110, 50, 50);
    cv::Scalar upper_blue(130, 255, 255);

    cv::inRange(hsvMat, lower_blue, upper_blue, blueMask);
    bitwise_and(bgrMat, bgrMat, image, blueMask);
}

原始图像:

结果:

蓝色检测似乎工作正常,但最终结果是红色而不是蓝色。知道为什么吗?我正确地使用了bitwise_and吗?

编辑

这几句台词很管用:

代码语言:javascript
复制
    cv::Mat output;
    image.copyTo(output, blueMask);
    output.copyTo(image);

而不是:

代码语言:javascript
复制
    bitwise_and(bgrMat, bgrMat, image, blueMask);

感谢卡洛利普的建议。由于某些原因,bgrMat在执行过程中会被“更改”,所以我使用的是原始的image

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-03 16:51:42

我认为你想要完成的是使用蓝色掩码从输入图像中复制像素,对吗?将结尾处的代码调整为:

代码语言:javascript
复制
cv::inRange(hsvMat, lower_blue, upper_blue, blueMask);

cv::Mat output;
bgrMat.copyTo(output, blueMask);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25106578

复制
相关文章

相似问题

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