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实现的登录和操作开心网脚本分享
Jul 09 Python
python实现在pickling的时候压缩的方法
Sep 25 Python
Python复制目录结构脚本代码分享
Mar 06 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
python先序遍历二叉树问题
Nov 10 Python
python遍历文件夹下所有excel文件
Jan 03 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
关于python中导入文件到list的问题
Oct 31 Python
Python NumPy灰度图像的压缩原理讲解
Aug 04 Python
详解Python如何批量采集京东商品数据流程
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
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
Javascript this指针
2009/07/30 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
好的自荐信的要求
2013/10/30 职场文书
企业车辆管理制度
2014/01/24 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
任命书格式
2014/06/05 职场文书
小学校长汇报材料
2014/08/20 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
高中体育课教学反思
2016/02/16 职场文书