使用Opencv python从Image中裁剪多边形

需求

给定标准框,把这张图上所有的标注框的小图切出来,标注框不一定是矩形,有多边形。

步骤

  1. 使用多边形点查找区域

  2. 使用多边形点创建遮罩

  3. 做遮罩修剪

  4. 如果需要,添加白色背景

代码

import os
import cv2
import json
import numpy as np






img = cv2.imread("xx.png")

j = 0
# 读取文件中的标准框,若无文件可省略此步骤,指定标注框
with open("xx.json", 'r', encoding='utf-8') as f:
    load_dict = json.load(f)
    dic_data=load_dict["shapes"]
    for i in dic_data:
        pts=np.array(i["points"])

		# 把浮点型转为整形
        pts = pts.astype(np.int64)
        
        #使用多边形点查找区域
        rect = cv2.boundingRect(pts)
        x, y, w, h = rect
        croped = img[y:y + h, x:x + w].copy()
		#使用多边形点创建遮罩
        pts = pts - pts.min(axis=0)
        mask = np.zeros(croped.shape[:2], np.uint8)
        cv2.drawContours(mask, [pts], -1, (255, 255, 255), -1, cv2.LINE_AA)
        
        #做遮罩修剪
        dst = cv2.bitwise_and(croped, croped, mask=mask)
		#如果需要,添加白色背景
        bg = np.ones_like(croped, np.uint8) * 255
        cv2.bitwise_not(bg, bg, mask=mask)
        dst2 = bg + dst


        Save_File = r'E:/pythonProject/'
        save_path = os.path.join(Save_File, str(j) + '.png')
        cv2.imwrite(save_path, dst2)
        j += 1












你可能感兴趣的:(人工智能,python,opencv,开发语言)