【发布时间】: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_color和upper_color,但随后在inRange函数中使用了red_lower和red_upper。它是否正确?这两个设置是什么? -
对不起,我将不同版本的简短摘要代码粘贴在一起,我编辑了OP,问题仍然相关。 y、x、w、h 用于裁剪图像,它们并不重要。
标签: python opencv image-segmentation