在面具上绘制轮廓
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)
我有一张带面具的图片;我在图像中找到了物体的轮廓。出于某种原因,当我调用 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)