python四个坐标点对图片区域最小外接矩形进行裁剪


Posted in Python onJune 04, 2021

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

python四个坐标点对图片区域最小外接矩形进行裁剪

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

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

图像原图如下:

python四个坐标点对图片区域最小外接矩形进行裁剪

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)]

python四个坐标点对图片区域最小外接矩形进行裁剪

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

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

python四个坐标点对图片区域最小外接矩形进行裁剪

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

#逆时针旋转
def Nrotate(angle,valuex,valuey,pointx,pointy):
      angle = (angle/180)*math.pi
      valuex = np.array(valuex)
      valuey = np.array(valuey)
      nRotatex = (valuex-pointx)*math.cos(angle) - (valuey-pointy)*math.sin(angle) + pointx
      nRotatey = (valuex-pointx)*math.sin(angle) + (valuey-pointy)*math.cos(angle) + pointy
      return (nRotatex, nRotatey)
#顺时针旋转
def Srotate(angle,valuex,valuey,pointx,pointy):
      angle = (angle/180)*math.pi
      valuex = np.array(valuex)
      valuey = np.array(valuey)
      sRotatex = (valuex-pointx)*math.cos(angle) + (valuey-pointy)*math.sin(angle) + pointx
      sRotatey = (valuey-pointy)*math.cos(angle) - (valuex-pointx)*math.sin(angle) + pointy
      return (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))

python四个坐标点对图片区域最小外接矩形进行裁剪

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

到此这篇关于python四个坐标点对图片区域最小外接矩形进行裁剪的文章就介绍到这了,更多相关python 图片坐标裁剪内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
浅谈五大Python Web框架
Mar 20 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
python模块smtplib学习
May 22 Python
Python实现注册、登录小程序功能
Sep 21 Python
解决新django中的path不能使用正则表达式的问题
Dec 18 Python
python3射线法判断点是否在多边形内
Jun 28 Python
jupyter notebook 多行输出实例
Apr 09 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
Python 文字识别
May 11 Python
Python OpenCV 图像平移的实现示例
Python包argparse模块常用方法
Jun 04 #Python
opencv读取视频并保存图像的方法
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 #Python
python opencv旋转图片的使用方法
Python还能这么玩之用Python修改了班花的开机密码
Anaconda安装pytorch及配置PyCharm 2021环境
You might like
php读取der格式证书乱码解决方法
2015/06/22 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP中SESSION过期设置
2021/03/09 PHP
JavaScript数值数组排序示例分享
2014/05/27 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python中精确输出JSON浮点数的方法
2014/04/18 Python
python生成指定尺寸缩略图的示例
2014/05/07 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
python动态加载包的方法小结
2016/04/18 Python
Python读取properties配置文件操作示例
2018/03/29 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
某公司.Net方向面试题
2014/04/24 面试题
元旦联欢会感言
2014/03/04 职场文书
单位工程竣工验收方案
2014/03/16 职场文书
药剂专业求职信
2014/06/20 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
煤矿安全协议书
2014/08/20 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
学生个人评语大全
2015/01/04 职场文书
七一晚会主持词
2015/06/29 职场文书