python opencv实现旋转矩形框裁减功能


Posted in Python onJuly 25, 2018

本文实例为大家分享了python opencv实现旋转矩形框裁减的具体代码,供大家参考,具体内容如下

经常遇见旋转矩形框的裁减问题,那么思路是,将矩形框旋转正然后再裁减

# -*- coding:gb2312 -*-
import cv2
from math import *
import numpy as np
import time

def rotateImage(img,degree,pt1,pt2,pt3,pt4):
  height,width=img.shape[:2]
  heightNew = int(width * fabs(sin(radians(degree))) + height * fabs(cos(radians(degree))))
  widthNew = int(height * fabs(sin(radians(degree))) + width * fabs(cos(radians(degree))))
  matRotation=cv2.getRotationMatrix2D((width/2,height/2),degree,1)
  matRotation[0, 2] += (widthNew - width) / 2
  matRotation[1, 2] += (heightNew - height) / 2
  imgRotation = cv2.warpAffine(img, matRotation, (widthNew, heightNew), borderValue=(255, 255, 255))
  pt1 = list(pt1)
  pt3 = list(pt3)
  [[pt1[0]], [pt1[1]]] = np.dot(matRotation, np.array([[pt1[0]], [pt1[1]], [1]]))
  [[pt3[0]], [pt3[1]]] = np.dot(matRotation, np.array([[pt3[0]], [pt3[1]], [1]]))
  imgOut=imgRotation[int(pt1[1]):int(pt3[1]),int(pt1[0]):int(pt3[0])]
  cv2.imshow("imgOut",imgOut) #裁减得到的旋转矩形框
  cv2.imwrite("imgOut.jpg",imgOut)
  # pt2 = list(pt2)
  # pt4 = list(pt4)
  # [[pt2[0]], [pt2[1]]] = np.dot(matRotation, np.array([[pt2[0]], [pt2[1]], [1]]))
  # [[pt4[0]], [pt4[1]]] = np.dot(matRotation, np.array([[pt4[0]], [pt4[1]], [1]]))
  # pt1 = (int(pt1[0]), int(pt1[1]))
  # pt2 = (int(pt2[0]), int(pt2[1]))
  # pt3 = (int(pt3[0]), int(pt3[1]))
  # pt4 = (int(pt4[0]), int(pt4[1]))
  # drawRect(imgRotation,pt1,pt2,pt3,pt4,(255,0,0),2)
  return imgRotation

def drawRect(img,pt1,pt2,pt3,pt4,color,lineWidth):
  cv2.line(img, pt1, pt2, color, lineWidth)
  cv2.line(img, pt2, pt3, color, lineWidth)
  cv2.line(img, pt3, pt4, color, lineWidth)
  cv2.line(img, pt1, pt4, color, lineWidth)


if __name__=="__main__":
  startTime=time.time()
  imgSrc=cv2.imread('E:\桌面\lena.jpg')
  imgResize=cv2.resize(imgSrc,(500,500))
  pt1=(100,100)
  pt2=(150,50)
  pt3=(175,75)
  pt4=(125,125)
  # drawRect(imgResize,pt1,pt2,pt3,pt4,(0,0,255),2)
  imgRotation=rotateImage(imgResize,-degrees(atan2(50,50)),pt1,pt2,pt3,pt4)
  endTime = time.time()
  print endTime-startTime
  cv2.imshow("imgRotation",imgRotation)
  cv2.imwrite("imgRotation.jpg",imgRotation)
  cv2.waitKey(0)

效果图:

python opencv实现旋转矩形框裁减功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python性能优化的20条建议
Oct 25 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
python读取与处理netcdf数据方式
Feb 14 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
Python使用tkinter实现摇骰子小游戏功能的代码
Jul 02 Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 Python
python中把元组转换为namedtuple方法
Dec 09 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
Python3匿名函数用法示例
Jul 25 #Python
Python实现动态添加属性和方法操作示例
Jul 25 #Python
利用pandas读取中文数据集的方法
Jul 25 #Python
利用pandas进行大文件计数处理的方法
Jul 25 #Python
使用python验证代理ip是否可用的实现方法
Jul 25 #Python
Python+Pandas 获取数据库并加入DataFrame的实例
Jul 25 #Python
python requests 测试代理ip是否生效
Jul 25 #Python
You might like
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
ReactNative实现Toast的示例
2017/12/31 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
Django-imagekit的使用详解
2020/07/06 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
python中如何打包用户自定义模块
2020/09/23 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
仓库管理专业个人自我评价范文
2013/11/11 职场文书
资源环境与城市管理专业推荐信
2013/11/30 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
被告答辩状范文
2015/05/22 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
教你部署vue项目到docker
2022/04/05 Vue.js
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers