如何解决有没有一种直接的方法可以在背景区域应该是透明的图像中裁剪不规则尺寸/非矩形对象
我正在做对象检测,它给出了我想从原始图像中裁剪出的特定多边形点,但除了感兴趣的区域之外,所有背景都应该是透明的(不仅仅是从 ROI 进行 bitwise_and 操作后获得的黑色/白色)。想知道是否可以以这种方式裁剪它而不是调整 alpha 值以降低背景的不透明度。
解决方法
这可以通过使用来自多边形点的 fillPoly() 在 Python/OpenCV 中的黑色背景上制作白色填充蒙版来完成。然后将蒙版放入图片的alpha通道。
输入:
import cv2
import numpy as np
# read image
img = cv2.imread("efile.jpg")
points = np.array( [[ [693,67],[23,85],[62,924],[698,918] ]] )
# draw white filled polygon from points on black background as mask
mask = np.zeros_like(img)
cv2.fillPoly(mask,points,(255,255,255))
mask = mask[:,:,0]
# put mask into alpha channel of image
result = img.copy()
result = cv2.cvtColor(result,cv2.COLOR_BGR2BGRA)
result[:,3] = mask
# write results
cv2.imwrite("efile_mask.jpg",mask)
cv2.imwrite("efile_transparent.png",result)
# display it
cv2.imshow("efile_mask",mask)
cv2.imshow("efile_transparent",result)
cv2.waitKey(0)
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。