因此,我试图建立一个神经网络,通过识别色带来对电阻强度进行分类。在开始这一步之前,我想使用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是否适合这一点,或我是否只需要使用等高线或其他方法来分离他们。
发布于 2019-11-11 21:37:35
你在正确的轨道和颜色阈值是一个伟大的方法分割电阻。目前,阈值处理是正确的,您只需要做几个简单的步骤,以消除背景。
我尝试了几个范围的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阈值或自适应阈值。
https://stackoverflow.com/questions/58804912
复制相似问题