python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形 |
您所在的位置:网站首页 › 怎样把图片裁剪成自定义形状 › python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形 |
一、裁剪单个多边形
import numpy as np
import cv2
# 读取图像
img = cv2.imread("dog.jpg")
# 坐标点points
pts = np.array([[10, 10], [15, 0], [35, 8], [100, 20], [300, 45], [280, 100], [350, 230], [30, 200]])
pts = np.array([pts])
# 和原始图像一样大小的0矩阵,作为mask
mask = np.zeros(img.shape[:2], np.uint8)
# 在mask上将多边形区域填充为白色
cv2.polylines(mask, pts, 1, 255) # 描绘边缘
cv2.fillPoly(mask, pts, 255) # 填充
# 逐位与,得到裁剪后图像,此时是黑色背景
dst = cv2.bitwise_and(img, img, mask=mask)
# 添加白色背景
bg = np.ones_like(img, np.uint8) * 255
cv2.bitwise_not(bg, bg, mask=mask) # bg的多边形区域为0,背景区域为255
dst_white = bg + dst
cv2.imwrite("mask.jpg", mask)
cv2.imwrite("dst.jpg", dst)
cv2.imwrite("dst_white.jpg", dst_white)
裁剪结果: 原图: mask: 裁剪后: 二、裁剪多个多边形已有多组坐标点pts,代表着多个多边形区域。 思路:对每组坐标点都在mask上进行相同的操作即可。这里就不重复写了。 三、裁剪镂空多边形已有多组坐标点pts,其中一组表示最外层多边形,其余的表示镂空区域多边形。 思路1:对于最外层多边形在mask上进行白色填充(255);对于镂空区域多边形在mask上进行黑色填充(0)即可。(推荐) 思路2:对每个多边形区域都生成一个mask,用原图分别进行裁剪,然后做图像减法,最后再添加白色背景即可。这里就不重复写了。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |