【问题标题】:Python OpenCV segmentation problemsPython OpenCV 分割问题
【发布时间】:2020-12-23 14:06:29
【问题描述】:

我正在尝试通过 Python 和 OpenCV 进行图像处理来跟踪塑料零件的变形。我在零件上放了红色标记,用智能手机拍照,然后将代码放在一起寻找图像上的轮廓,过滤掉尺寸合适的轮廓。该代码在夜间使用智能手机上的闪光灯拍摄的图像上运行良好,但是当我在白天没有额外照明的情况下拍摄它们时,我在分割图像时无法排除标记。

我不明白为什么它不起作用,因为标记在图像的 HSV 版本上明显突出。我错过了什么吗

代码和图片如下。

代码:

a1 = 0
a2 = 0
a3 = 0
b1 = 187
b2 = 204
b3 = 204

red_lower = np.array([a1,a2,a3], np.uint8)
red_upper = np.array([b1,b2,b3], np.uint8)

img = cv2.imread(img_path)
crop = img[y:y+h, x:x+w]
blur = cv2.blur(crop,(2,2))
hsv = cv2.cvtColor(blur,cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, red_lower, red_upper)
mask_copy = mask.copy()
cnts = cv2.findContours(mask_copy,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)

有问题的图片:

HSV 中的问题图片:

分割后的问题图片:

【问题讨论】:

  • 您设置了lower_colorupper_color,但随后在inRange 函数中使用了red_lowerred_upper。它是否正确?这两个设置是什么?
  • 对不起,我将不同版本的简短摘要代码粘贴在一起,我编辑了OP,问题仍然相关。 y、x、w、h 用于裁剪图像,它们并不重要。

标签: python opencv image-segmentation


【解决方案1】:

您将有效的色调范围指定为 0 到 187。

在 OpenCV 中,当以 uint8 值表示时,色调圆的范围为 0 到 179(360 度,以 2 度为增量)。

这意味着您刚刚接受了所有色调值。

【讨论】:

  • 好的,现在我明白了。当我在黑暗中拍照时,闪光灯发出的大部分光线都被红色方块反射,这就是它起作用的原因。在第二种情况下,光也从测试样本的其他部分反射,我的分割值拾取了一切。非常感谢。
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 2023-04-10
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多