python3实现cv2+numpy裁剪不规则四边形图片

功能

从给定的图片中裁剪不规则四边形,保持图片不变形,不旋转。

效果图在这里插入图片描述

依赖环境

  • cv2
  • numpy
  • python3

核心代码

    mask = np.zeros(img.shape, dtype=np.uint8)
    roi_corners = np.array([quad], dtype=np.int32)
    
    ignore_mask_color = (255,) * img.shape[2]
    cv2.fillPoly(mask, roi_corners, ignore_mask_color)
    
    masked_img = cv2.bitwise_and(img, mask)

szZack的博客

测试结果

  • 输入图片
    在这里插入图片描述

  • 输出图片
    在这里插入图片描述

  • 完整效果图
    在这里插入图片描述

完整代码

szZack的博客

import cv2
import numpy as np
import argparse

# 从图片中截取不规则四边形图片
def crop_quadrilateral(img, quad):
    # img: cv2彩色图片
    # quad: [(1,1), (3,3), (2,6), (5,8)]
    
    mask = np.zeros(img.shape, dtype=np.uint8)
    roi_corners = np.array([quad], dtype=np.int32)
    
    ignore_mask_color = (255,) * img.shape[2]
    cv2.fillPoly(mask, roi_corners, ignore_mask_color)
    
    masked_img = cv2.bitwise_and(img, mask)
    masked_img[np.where(masked_img==0)] = 255
    
    return masked_img
    
    
if __name__ == '__main__':
    # python crop_quadrilateral.py --image_path=123.jpg --left_up_x=111 --left_up_y=15 --right_up_x=532 --right_up_y=62 --right_down_x=529 --right_down_y=93  --left_down_x=108 --left_down_y=46
    parser = argparse.ArgumentParser(description="crop_quadrilateral")
    
    parser.add_argument('--image_path', help='image path', type=str)
    parser.add_argument('--left_up_x', help='left_up_point', type=int)
    parser.add_argument('--left_up_y', help='left_up_point', type=int)
    parser.add_argument('--left_down_x', help='left_down_point', type=int)
    parser.add_argument('--left_down_y', help='left_down_point', type=int)
    parser.add_argument('--right_up_x', help='right_up_point', type=int)
    parser.add_argument('--right_up_y', help='right_up_point', type=int)
    parser.add_argument('--right_down_x', help='right_down_point', type=int)
    parser.add_argument('--right_down_y', help='right_down_point', type=int)
    
    args = parser.parse_args()
    
    img = cv2.imread(args.image_path)
    quad = [(args.left_up_x, args.left_up_y), (args.right_up_x, args.right_up_y), \
            (args.right_down_x, args.right_down_y), (args.left_down_x, args.left_down_y)]
    crop_img = crop_quadrilateral(img, quad)
    cv2.imwrite('./crop_img.jpg', crop_img)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

szZack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值