在图像裁剪操作中,opencv和pillow两个库都具有相应的函数,但是这两个库中的函数仅仅能对与图片平行的矩形进行裁剪操作,如果想要对目标的最小外接矩形进行裁剪该如何操作呢?如下所示:

具体处理该问题的思路如下:

  1. 计算最小外接矩形的四个点的坐标,旋转角度
  2. 将原图像进行旋转,旋转角度为最小外接矩形的角度
  3. 将四个点的坐标进行映射,求出被旋转后图像的四个点的坐标
  4. 利用这四个点对图像进行裁剪

图像原图如下:

1 求出该区域的最小外接矩形,并且得到外接矩形的四个点的坐标和旋转角度。

rect = cv2.minAreaRect(self.contours[0])#rect为[(旋转中心x坐标,旋转中心y坐标),(矩形长,矩形宽),旋转角度]
box_origin = cv2.boxPoints(rect)#box_origin为[(x0,y0),(x1,y1),(x2,y2),(x3,y3)]

2 将原图像进行旋转,旋转角度为最小外接矩形的角度,由于防止旋转后目标区域在图像外面,所以我将图像大小扩大为原来的2倍。

M = cv2.getRotationMatrix2D(rect[0],rect[2],1)
dst = cv2.warpAffine(rotateimg,M,(2*rotateimg.shape[0],2*rotateimg.shape[1]))

3 将原四个点的坐标做映射,映射到旋转后的区域,得到新的四个点的坐标。

#逆时针旋转
def Nrotate(angle,valuex,valuey,pointx,pointy):angle = (angle/180)*math.pivaluex = np.array(valuex)valuey = np.array(valuey)nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointxnRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointyreturn (nRotatex, nRotatey)
#顺时针旋转
def Srotate(angle,valuex,valuey,pointx,pointy):angle = (angle/180)*math.pivaluex = np.array(valuex)valuey = np.array(valuey)sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointxsRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointyreturn (sRotatex,sRotatey)
#将四个点做映射
def rotatecordiate(angle,rectboxs,pointx,pointy):output = []for rectbox in rectboxs:if angle>0:output.append(Srotate(angle,rectbox[0],rectbox[1],pointx,pointy))else:output.append(Nrotate(-angle,rectbox[0],rectbox[1],pointx,pointy))return output
box = rotatecordiate(rect[2],box_origin,rect[0][0],rect[0][1])

4 利用四个点坐标进行裁剪,如2中图所示,图像经过旋转后已经变为和图片没有旋转角的图像,经过实验观察旋转后的坐标还是有细微差别,但误差已经在千分点甚至万分点左右,对我们裁剪造成的影响可以忽略不计。

def imagecrop(image,box):xs = [x[1] for x in box]ys = [x[0] for x in box]print(xs)print(min(xs),max(xs),min(ys),max(ys))cropimage = image[min(xs):max(xs),min(ys):max(ys)]print(cropimage.shape)cv2.imwrite('cropimage.png',cropimage)return cropimage
imagecrop(dst,np.int0(box))

到此,利用4个坐标点对图像进行裁剪操作已经完成。

python利用四个坐标点对图片目标区域最小外接矩形进行裁剪相关推荐

  1. python如何做四象图_Python使用四个坐标点来剪切图像目标区域的最小外接矩形,python,利用,对,图片,进行,裁剪...

    在图像裁剪操作中,opencv和pillow两个库都具有相应的函数,但是这两个库中的函数仅仅能对与图片平行的矩形进行裁剪操作,如果想要对目标的最小外接矩形进行裁剪该如何操作呢?如下所示: 具体处理该问 ...

  2. python opencv最小外接矩形_Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...

  3. 遍历图像 找最小外接矩形 matlab,2018a版本MatLab利用regionprops函数获取图片中物体轮廓最小外接矩形...

    2018a版本MatLab利用regionprops函数获取图片中物体最小外接矩形 本次内容,用于介绍利用matlab中的regionprops函数来获取图像区域中的物体的最小外接矩形信息(位置(x, ...

  4. python+opencv获取最小外接矩形

    python+opencv获取最小外接矩形 环境 代码 效果 环境 python版本:3.8 opencv版本:4.3.0.36 代码 from PIL import Image from pylab ...

  5. Python利用bs4批量抓取网页图片并下载保存至本地

    Python利用bs4批量抓取网页图片并下载保存至本地 使用bs4抓取网页图片,bs4解析比较简单,需要预先了解一些html知识,bs4的逻辑简单,编写难度较低.本例以抓取某壁纸网站中的壁纸为例.(b ...

  6. python外包凹多边形生成_Python实现图片查找轮廓、多边形拟合、最小外接矩形代码...

    1.概述 经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用.本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试. 原图为: 2.测试代码: import cv2 import ...

  7. Python图片查找轮廓、多边形拟合、最小外接矩形操作实例

    1.概述 经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用.本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试. 原图为:                            ...

  8. python 提取最小外接矩形_python给人脸带上口罩(简单版)

    导读 因为目前公开的口罩人脸数据比较少,如果想训练一个口罩人脸识别模型,必须依赖大量的人脸数据.为了收集到更多的口罩人脸数据,我们只能利用已有的公开人脸数据上通过程序来模拟人脸带口罩.这篇文章向大家介 ...

  9. python opencv最小外接矩形中心点_Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAre ...

  10. python 最小外接矩形笔记

    目录 opencv生成最小外接矩形: 最小外接矩形修正版: opencv生成最小外接矩形: cnt = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]]) # 必须 ...

最新文章

  1. visual2017中给C#项目添加配置文件
  2. 在Fabric ChainCode中导入第三方包(以状态机为例)
  3. Apache ZooKeeper - 集群中 Observer 的作用以及 与 Follow 的区别
  4. 【牛客 - 327牛客寒假算法基础集训营2 I】处女座的测验(二)(积性函数性质,数论,素数唯一性分解,STL)
  5. 海马体what where记忆推理模型
  6. 《底层逻辑》--思维导图
  7. HDU - 1525
  8. KGDiscreetAlertView
  9. onlaunch 异步_微信小程序之onLaunch与onload异步问题
  10. android实现控件的手势缩放、移动以及双击还原
  11. Stata资源:一些不错的Stata-Blogs
  12. c++中的虚函数及虚函数表
  13. 如何利用Java进行高效的彩信群发
  14. get请求获得传递参数
  15. 亳州市发明专利申请费用多少钱,权利要求书要怎么写?
  16. 数字图像处理笔记(一)——图像存储空间,分辨率,图像内插
  17. 移动硬盘安装kali
  18. B3:Unity制作Moba类游戏——加载地图系统
  19. 《永磁无刷直流电机技术》笔记
  20. 金税 TC718K 驱动

热门文章

  1. 气球java游戏_团队游戏 气球
  2. 2021年P气瓶充装新版试题及P气瓶充装证考试
  3. 积极心理学第十九课 如何让爱情天长地久
  4. 网络爬虫(基于python的网络爬虫批量爬取图片)
  5. 课设-基于51单片机的智能小车(循迹+避障+APP控制)
  6. Specification查询
  7. Specification 对象的常用方法
  8. kubectl源码分析之drain
  9. 电子邮件营销是什么?邮件群发软件
  10. 程序猿12个人艰不拆的真相