Python OpenCV分割问题

Python OpenCV segmentation problems

我正在尝试通过 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 中有问题的图片:

分割后有问题的图片:

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

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

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