使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值