欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形

程序员文章站 2022-07-08 15:49:41
一、裁剪单个多边形import numpy as npimport cv2# 读取图像img = cv2.imread("dog.jpg")# 坐标点pointspts = np.array([[10, 10], [15, 0], [35, 8], [100, 20], [300, 45], [280, 100], [350, 230], [30, 200]])pts = np.array([pts])# 和原始图像一样大小的0矩阵,作为maskmask = np.zeros(img...

一、裁剪单个多边形

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)

裁剪结果:

原图:python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形

mask:python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形

裁剪后:python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形

 

二、裁剪多个多边形

已有多组坐标点bts,代表着多个多边形区域。

思路:对每组坐标点都在mask上进行相同的操作即可。这里就不重复写了。

三、裁剪镂空多边形

已有多组坐标点bts,其中一组表示最外层多边形,其余的表示镂空区域多边形。

思路1:对于最外层多边形在mask上进行白色填充(255);对于镂空区域多边形在mask上进行黑色填充(0)即可。这里就不重复写了。

思路2:对每个多边形区域都生成一个mask,用原图分别进行裁剪,然后做图像减法,最后再添加白色背景即可。这里就不重复写了。

本文地址:https://blog.csdn.net/PanYHHH/article/details/110940428

相关标签: python