以下是如何在一组轮廓之外填充黑色颜色的图像的方法:
import cv2
import numpy
img = cv2.imread("zebra.jpg")
stencil = numpy.zeros(img.shape).astype(img.dtype)
contours = [numpy.array([[100, 180], [200, 280], [200, 180]]), numpy.array([[280, 70], [12, 20], [80, 150]])]
color = [255, 255, 255]
cv2.fillPoly(stencil, contours, color)
result = cv2.bitwise_and(img, stencil)
cv2.imwrite("result.jpg", result)
![图片描述在此](https://istack.dev59.com/FKVRg.webp)
更新:上面的代码利用了bitwise_and
与0相结合会产生0这一事实,对于除黑色填充颜色以外的颜色不起作用。要使用任意颜色进行填充:
import cv2
import numpy
img = cv2.imread("zebra.jpg")
fill_color = [127, 256, 32]
mask_value = 255
contours = [ numpy.array([ [100, 180], [200, 280], [200, 180] ]),
numpy.array([ [280, 70], [12, 20], [80, 150]])
]
stencil = numpy.zeros(img.shape[:-1]).astype(numpy.uint8)
cv2.fillPoly(stencil, contours, mask_value)
sel = stencil != mask_value
img[sel] = fill_color
cv2.imwrite("result.jpg", img)
![在此输入图片描述](https://istack.dev59.com/BGLNL.webp)
也可以使用另一张图片填充,例如,使用img [sel] = ~ img [sel]
而不是 img [sel] = fill_color
将使用相同的反转图像填充轮廓外部:
![在此输入图片描述](https://istack.dev59.com/qO6rm.webp)
cv2.imread()
函数加载普通的jpeg图像,白色的颜色值可能是[255, 255, 255]
。或者对于单通道图像,仅为255
。 - Headcrab