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的Django框架使用入门指引
Apr 15 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
Python字符串的全排列算法实例详解
Jan 07 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
Python简单基础小程序的实例代码
Apr 28 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
快速解决pymongo操作mongodb的时区问题
Dec 05 Python
一些让Python代码简洁的实用技巧总结
Aug 23 Python
yolov5返回坐标的方法实例
Mar 17 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比你想象的好得多
2014/11/27 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
python实现内存监控系统
2021/03/07 Python
python实现烟花小程序
2019/01/30 Python
深入了解Python在HDA中的应用
2019/09/05 Python
python 进程池pool使用详解
2020/10/15 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
四好少年事迹材料
2014/01/12 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
班主任新年寄语
2014/04/04 职场文书
竞赛口号大全
2014/06/16 职场文书
教师一帮一活动总结
2014/07/08 职场文书
实习生个人总结范文
2015/02/28 职场文书
医院志愿者活动总结
2015/05/06 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
2016情人节宣传语
2015/07/14 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
高一作文之乐趣
2019/11/21 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers