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中selenium实现文件上传所有方法整理总结
Apr 01 Python
python如何获取服务器硬件信息
May 11 Python
python九九乘法表的实例
Sep 26 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
详解python 注释、变量、类型
Aug 10 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
wxPython之wx.DC绘制形状
Nov 19 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
python实现批处理文件
Jul 28 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 FLEA中二叉树数组的遍历输出
2012/09/26 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
区域总监的岗位职责
2013/11/21 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
千手观音观后感
2015/06/03 职场文书