【问题标题】:colour based blob detection in open cvopencv中基于颜色的斑点检测
【发布时间】:2016-06-09 05:30:32
【问题描述】:

我想为基于图像处理的项目在打开的 cv 中检测基于颜色的斑点。但是在用于斑点检测的 open cv 函数中,他们将输入的 BGR 图像转换为灰度,然后对图像进行阈值处理,从而导致颜色信息的丢失。

以下代码来自 blob 检测库。

if (image.channels() == 3)
        cvtColor(image, grayscaleImage, COLOR_BGR2GRAY);
    else
        grayscaleImage = image.getMat();

    if (grayscaleImage.type() != CV_8UC1) {
        CV_Error(Error::StsUnsupportedFormat, "Blob detector only supports 8-bit images!");
    }  

是否有任何基于颜色的斑点检测方法?

【问题讨论】:

    标签: c++ opencv image-processing computer-vision


    【解决方案1】:

    是的,您可以使用 opencv cv::inRange 方法轻松分割颜色斑点,这将为落在指定范围内的像素生成单通道二进制掩码。使用inRange 的主要优势在于您可以分割所有类型的垫子,即grayScale, RGB, RGBA。可以这样使用:

    image = cv::imread("./sample.png"); #For reading the image in RGB format
    #image = cv::imread("./sample.png", -1) #For reading the image in existing format
    cv::Mat segmented_image;
    # For segmenting the image in RGB format.
    cv::inRange(image, cv::Scalar(100, 10, 60), cv::Scalar(120, 50, 70), segmented_image);
    
    # For segmenting the image in Gray format
    cv::inRange(image, cv::Scalar(110), cv::Scalar(150), segmented_image);
    
    # For segmenting the image in RGBA format
    cv::inRange(image, cv::Scalar(100, 10, 60, 10), cv::Scalar(120, 50, 70, 250), segmented_image);
    

    【讨论】:

      【解决方案2】:

      自己处理从彩色图像到灰度图像的转换。例如,如果您想要红色对象,则只选择红色通道,然后搜索那里的 blob。

      通常,最好从 RGB 转换为 HSV(色相、饱和度、值)。色调通道应该给你一个更好的颜色分离。 (见HSV and HSL

      cv::cvtColor(image, imgHSV, cv::COLOR_BGR2HSV);
      cv::inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgThresholded);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 2018-08-02
        • 2017-04-08
        • 2012-04-05
        • 1970-01-01
        相关资源
        最近更新 更多