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编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
Aug 02 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python日志器使用方法及原理解析
Sep 27 Python
python 高阶函数简单介绍
Feb 19 Python
Python pandas求方差和标准差的方法实例
Aug 04 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 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 var_export与var_dump 输出的不同
2013/08/09 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python算法之图的遍历
2017/11/16 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
中层干部竞争上岗演讲稿
2014/01/13 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
教师师德工作总结2015
2015/07/22 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书