具有OpenCV的阈值电阻器带

时间:2019-11-11 16:13:03

标签: python image opencv image-processing vision

因此,我正在尝试制作一个神经网络,通过识别色带对电阻强度进行分类。在执行该步骤之前,我想使用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输出

enter image description here enter image description here

因此,总的来说,我只是想知道是否有人知道像LUV这样的其他色彩模式是否可以很好地工作,或者是否只需要使用轮廓或其他方法将它们分开。

1 个答案:

答案 0 :(得分:0)

您在正确的轨道上,颜色阈值化是分割电阻器的好方法。当前,阈值设置正确执行,您只需要执行一些简单的步骤即可删除背景。

  

我尝试了几种范围的HLS,RGB和HSV,但是它们都不能消除电阻器的背景。

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

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

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

enter image description here enter image description here

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,它们会自动计算阈值。