【问题标题】:Thresholding Resistor Bands with OpenCV使用 OpenCV 阈值电阻带
【发布时间】:2020-03-07 08:24:19
【问题描述】:

所以我正在尝试创建一个神经网络,通过识别色带来对电阻强度进行分类。在开始这一步之前,我想使用 OpenCV 对除电阻带以外的所有颜色进行阈值处理,以便神经网络更容易分类。但是我不知道哪种阈值类型最适合这个。

我尝试了 HLS、RGB 和 HSV 的几个范围,但它们都没有摆脱电阻器的背景。

注意:我已经用轮廓去除了背景,所以现在剩下的就是上面有彩色线条的电阻了。

在我的例子中,HLS 去掉了颜色,但保留了电阻背景,如下面的代码所示

frame_HLS = cv2.cvtColor(masked_data, cv2.COLOR_BGR2HLS)
frame_threshold = cv2.inRange(frame_HLS, (50, 0, 0), (139, 149, 255))

这是原始图像的图像,以及 HLS 输出

总的来说,我只是想知道是否有人知道 LUV 等其他颜色模式是否适用于此,或者我是否只需要使用轮廓或其他方法将它们分开。

【问题讨论】:

    标签: python image opencv image-processing vision


    【解决方案1】:

    您在正确的轨道上,颜色阈值是分割电阻器的好方法。目前,阈值处理正常,您只需执行几个简单的步骤即可移除背景。

    我尝试了几个范围的 HLS、RGB 和 HSV,但它们都没有摆脱电阻的背景。

    要去除背景,我们可以使用cv2.inRange() 生成的二进制掩码。我们只需使用cv2.bitwise_and() 并通过这两行将遮罩上的所有黑色像素转换为白色

    result = cv2.bitwise_and(original, original, mask=frame_threshold)
    result[frame_threshold==0] = (255,255,255)
    

    这是您当前拥有的蒙版图像(左)和移除背景后(右)

    import cv2
    
    image = cv2.imread('1.png')
    original = image.copy()
    frame_HLS = cv2.cvtColor(image, cv2.COLOR_BGR2HLS)
    frame_threshold = cv2.inRange(frame_HLS, (50, 0, 0), (139, 149, 255))
    
    result = cv2.bitwise_and(original, original, mask=frame_threshold)
    result[frame_threshold==0] = (255,255,255)
    
    cv2.imshow('result', result)
    cv2.waitKey()
    

    但是我不知道哪种阈值类型最适合这个。

    现在您正在使用颜色阈值,您可以继续使用此方法并尝试 HLS、RGB 或 HSV 颜色空间中的其他范围。在所有这些情况下,您都可以通过将蒙版上的所有黑色像素转换为白色来移除背景。如果您决定转向另一种阈值方法,请查看自动计算阈值的 Otsu's thresholdAdaptive thresholding

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 1970-01-01
      • 2014-05-07
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多