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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 Python
在Python中处理时间之clock()方法的使用
May 22 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
对pandas进行数据预处理的实例讲解
Apr 20 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
Django组件content-type使用方法详解
Jul 19 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
浅谈django channels 路由误导
May 28 Python
用python写爬虫简单吗
Jul 28 Python
Python基础详解之描述符
Apr 28 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设计模式小结
2013/02/15 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
javascript引用对象的方法
2007/01/11 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
2020/05/10 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
浅谈python可视化包Bokeh
2018/02/07 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
cf战队收人口号
2014/06/21 职场文书
学校开学标语
2014/10/06 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
工作岗位职责范本
2015/02/15 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
党小组鉴定意见
2015/06/02 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
单位提档介绍信
2015/10/22 职场文书
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android