使用 OpenCV 阈值电阻带
Posted
技术标签:
【中文标题】使用 OpenCV 阈值电阻带【英文标题】:Thresholding Resistor Bands with 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 等其他颜色模式是否适用于此,或者我是否只需要使用轮廓或其他方法将它们分开。
【问题讨论】:
【参考方案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 threshold 或 Adaptive thresholding。
【讨论】:
以上是关于使用 OpenCV 阈值电阻带的主要内容,如果未能解决你的问题,请参考以下文章