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的Scrapy爬虫框架简单学习笔记
Jan 20 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
python模糊图片过滤的方法
Dec 14 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
详解python运行三种方式
May 13 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
PageFactory设计模式基于python实现
Apr 14 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
python Django 反向访问器的外键冲突解决
May 20 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
jquery提示 "object expected"的解决方法
2009/12/13 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
python连接池实现示例程序
2013/11/26 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
实用自动化运维Python脚本分享
2018/06/04 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
详解Django admin高级用法
2019/11/06 Python
Python中base64与xml取值结合问题
2019/12/22 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
如何利用python读取micaps文件详解
2020/10/18 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
语文教师个人工作总结
2015/02/06 职场文书
工作岗位职责范本
2015/02/15 职场文书
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python
MySQL 数据 data 基本操作
2022/05/04 MySQL