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 相关文章推荐
简单介绍Ruby中的CGI编程
Apr 10 Python
python实现中文输出的两种方法
May 09 Python
Python实现比较两个列表(list)范围
Jun 12 Python
Python实现LRU算法的2种方法
Jun 24 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
python构建深度神经网络(续)
Mar 10 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
如何用python绘制雷达图
Apr 24 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学习笔记 数组的常用函数
2011/06/13 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
Vue实现todolist删除功能
2018/06/26 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
Python设计实现的计算器功能完整实例
2017/08/18 Python
python实现拓扑排序的基本教程
2018/03/11 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Python中函数参数匹配模型详解
2019/06/09 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
python实现TCP文件传输
2020/03/20 Python
python简单的三元一次方程求解实例
2020/04/02 Python
python openssl模块安装及用法
2020/12/06 Python
房产委托公证书样本
2014/04/04 职场文书
投诉信格式范文
2015/07/02 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript