在面具上绘制轮廓

Drawing Contours on Mask

我有一张带面具的图片;我在图像中找到了物体的轮廓。出于某种原因,当我调用 cv2.drawContours() 时,对象的轮廓以灰色绘制。有没有办法在图片上画彩色线条?

代码如下:

img = cv2.imread("Assets/Setup2.jpg")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
masked_img = cv2.inRange(hsv_img, (50, 40, 40), (70, 255, 255))
contours = cv2.findContours(masked_img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]
cv2.drawContours(masked_img, contours, -1, (60, 200, 200), 5)
cv2.imshow("Frame", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

轮廓以灰色绘制,因为输入图像 masked_img 是 single-channel 图像。 cv2.threshold 或 cv2.inRange returns single-channel 图像的输出,无论其输入如何。

以下是您应该如何修正代码以获得预期效果:

img = cv2.imread("Assets/Setup2.jpg")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
masked_img = cv2.inRange(hsv_img, (50, 40, 40), (70, 255, 255))
masked_img = cv2.cvtColor(masked_img, cv2.COLOR_GRAY2BGR)  // changes gray to BGR
contours = cv2.findContours(masked_img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]
cv2.drawContours(masked_img, contours, -1, (60, 200, 200), 5) 
cv2.imshow("Frame", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

或者您可以直接在输入图像上绘制轮廓。在这种情况下,您只需要将 cv2.drawContour 更改为以下代码

cv2.drawContours(img, contours, -1, (60, 200, 200), 5)