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函数的周期性执行实现方法
Aug 13 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
Python 中Pickle库的使用详解
Feb 24 Python
python微信公众号之关键词自动回复
Jun 15 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
python文件选择对话框的操作方法
Jun 27 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 Python
Jupyter Notebook安装及使用方法解析
Nov 12 Python
python反爬虫方法的优缺点分析
Nov 25 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 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
global.php
2006/12/09 PHP
PHP Pear 安装及使用
2009/03/19 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
Java里面有没有全局变量?为什么?
2015/02/06 面试题
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
银行求职信个人范文
2013/12/16 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
营销计划书范文
2015/01/17 职场文书
永远是春天观后感
2015/06/12 职场文书
工作感想范文
2015/08/07 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
《火烧云》教学反思
2016/02/23 职场文书