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的Urllib库的一些高级用法
Apr 30 Python
实例Python处理XML文件的方法
Aug 31 Python
Python列表切片用法示例
Apr 19 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
详解【python】str与json类型转换
Apr 29 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
Python class的继承方法代码实例
Feb 14 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 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 分页函数multi() discuz
2009/06/21 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
Python模块的加载讲解
2019/01/15 Python
python+selenium实现QQ邮箱自动发送功能
2019/01/23 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
了解一下python内建模块collections
2020/09/07 Python
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
外国人聘用意向书
2014/04/01 职场文书
捐资助学感谢信
2015/01/21 职场文书
党风廉正建设责任书
2015/01/29 职场文书
个园导游词
2015/02/04 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android