iOS:OpenCV 红色范围

标签 ios opencv bgr

我正在尝试使用 OpenCV 库在图片中圈出红色。我在谷歌看到了很多问题,但没有人帮助我。我的代码如下:

void highLightRed(const cv::Mat& inputFrame, cv::Mat& outputFrame)
{
cv::Mat gray, edges, red, blurred;

// blur will enhance edge detection
medianBlur(inputFrame, blurred, 9);

// give image in gray color space
getGray(blurred, gray);

cv::inRange(gray, cv::Scalar(0,0,112), cv::Scalar(60,0,225), red); //BGR

// using Canny algorithm to find edges
cv::Canny(red, edges, 50, 150);

std::vector< std::vector<cv::Point> > c;

// find contours of edges
cv::findContours(edges, c, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);

NSLog(@"size: %lu", c.size());

inputFrame.copyTo(outputFrame);

// draw contour in green (0,200,0) with thinkness 3
//cv::drawContours(outputFrame, c, -1, cv::Scalar(0,200,0),3);
cv::drawContours(outputFrame, c, -1, cv::Scalar(0,200,0),2);

}

void getGray(const cv::Mat& input, cv::Mat& gray)
{
const int numChannes = input.channels();

if (numChannes == 4)
{
    cv::cvtColor(input, gray, cv::COLOR_BGRA2GRAY);
}
}

问题:如果图片中只有红色和白色,则此代码完美运行,它成功包围了红色。但是,如果涉及多种颜色,特别是深色,则颜色检测将失败。
我需要只检测红色的精确范围。谢谢

最佳答案

找到 BGR 或 RGB 格式的确切颜色范围非常困难。您将不得不经常玩它(如果您是新手)。

一个非常简单的方法:

  • 使用 cvtColor() 将图像转换为 HSV 格式
  • 拆分您的 HSV image分为三个 channel ,即 H、S 和 V channel 。
  • H-channel 中提取红色.你可以看看here找到红色的色调范围。
  • 合并这个新的 H-channel与旧 SV channel 。
  • 转换回 BGR 格式。现在您的 BGR 图像将只包含红色。
  • 关于iOS:OpenCV 红色范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31423633/

    相关文章:

    ios - Swift firebase .observe 或 .observeSingleEvent 不起作用

    ios - 是否存在将我的 cordova 应用程序发布到 IOS 的服务?

    iphone - iOs (cocos2d) 屏幕截图缓存或 CCRenderTexture 缓冲区?它没有改变

    optimization - 用于人脸检测优化的 cvPyrDown 与 cvResize

    c++ - 是否有公式可以确定给定 BGR 值的整体颜色? (OpenCV 和 C++)

    ios - 如何判断颜色格式是RGB还是BGR?

    ios - 如何为核心数据模型对象自动生成默认的 UITableView?

    python - OpenCV-Python 中的简单数字识别 OCR

    python - 蒙版图像的 BGR 值(OpenCV、Python)

    C++ vector::erase 问题与 OpenCV 代码