python opencv旋转_Python opencv实现与rotatedrect类似的矩形旋转,pythonopencv,RotatedRect

本文原理:先旋转矩形到指定角度,然后提取矩形外轮廓,从而获取旋转后的矩形坐标点。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

# @Author: tcy

# @Date: 2020-5-2 21:00:53

# @Version:V1.01

# @Last Modified by: tcy shanghai songjiang xiaokunshan

# @Last Modified time: 2020-5-7 21:21:10

import cv2,numpy as np

class Geometry(object):

def rotation_Scale(self,src, angle:'float',rotation_center:'(float,float)'=None,scale:'float'=1)->np.ndarray:#彩色:旋转缩放

"""

:param src: ndarray

:param angle: float rotation angle

:param scale: float

:return: ndarray

retval = cv2.getRotationMatrix2D(center, angle, scale) // 图像旋转转换矩阵

参数:

center旋转中心点;

angle旋转角度(正为逆时针)

scale变换尺度(缩放大小)

"""

rows, cols = src.shape[:2]

cx=rotation_center[0] if rotation_center else cols/2.0

cy=rotation_center[1] if rotation_center else rows/2.0

# cols - 1 and rows - 1 are the coordinate limits.

M = cv2.getRotationMatrix2D((cx, cy), angle, scale)

dst = cv2.warpAffine(src, M, (int(2*cx), int(2*cy)))

return dst

def circleRect(self,rect:"(pt1,pt2)",angle:float,w_image=480,h_image=640,rectcenter=True):

"""

:param rect: int,int,int,int 矩形左上角右下角坐标

:param angle: 旋转角度 非弧度

:param w_image: 图像宽度

:param h_image: 图像高

:param rectcenter: bool or (int x,int y)指定绕指定点旋转;True绕矩形中心旋转;false绕图像中心旋转

:return: rect旋转后矩阵坐标点;可能多于4点

"""

img=np.zeros((w_image,h_image),dtype=np.uint8)

cv2.rectangle(img,rect[0],rect[1],255,-1)

if len(rect)==4:

x1,y1,x2,y2=rect

else:

x1,y1=rect[0]

x2,y2=rect[1]

w_rect,h_rect=abs(x2-x1),abs(y2-y1)

# ret,binary=cv2.threshold(img,254,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

# cv2.line(img,(w_rect,h_rect),(w_rect,h_rect),125,5)

if rectcenter==False:

img_rotation=self.rotation_Scale(img,angle) #绕图像中心点旋转

elif rectcenter==True:

img_rotation=self.rotation_Scale(img,angle,(w_rect,h_rect))#绕矩形中心点旋转

else:#参数设置不合理只能显示部分图像

img_rotation=self.rotation_Scale(img,angle,(rectcenter[0],rectcenter[1]))

contours,hierarchy=cv2.findContours(img_rotation,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

return contours[0].ravel()

def test_revolvePixs(self,image=None):

pt1=(100,100)

pt2=(300,300)

e1 = cv2.getTickCount() # 您的代码执行

print('get point=',self.circleRect((pt1,pt2),45))

e2 = cv2.getTickCount()

t = (e2 - e1) / cv2.getTickFrequency() * 1000

print("runTime=", t, "ms") # 2.1672447196501228 ms

#===========================================================

if __name__=="__main__":

import os

#girl=os.getcwd()+'\\data\\girl.jpg'

#gray=os.getcwd()+'\\data\\fastener1.jpg'

a=Geometry()

a.test_revolvePixs()

https://blog.csdn.net/u013948010/article/details/78605043

python+opencv图片旋转矩形分割 这边博文没看明白,希望你能看懂。欢迎交流。希望分享更好的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于string转整数

又是leetcode的easy级别题,很基本的题目,却漏考虑很多情况,动手前一定要考虑清楚呀!!! 就当做锻炼写作能力吧,先上题目! 将文本转换成整数,注意一下几点: 1.文…

数字三角形——递归、递推、记忆化搜索

数字三角形 描述: 有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数。 问题: 从第一行的数开始,每次可以往左下或右下走一格,直到走到最下行…

Java 7功能概述

前面我们讨论了所有未纳入Java 7的内容,然后回顾了将其纳入Java 7的有用的Fork / Join框架 。 今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强功能,这些功能虽然不是开创性的,但是对于任何能够使用JDK 7的开发人员来说都是…

缓存技术

提升系统性能的主要方式之一就是缓存。它可以挡掉大部分的数据库访问的冲击,如果没有它,系统很可能会因为数据库不可用导致整个系统崩溃。 但是缓存带来了另外一些棘手的问题: 数据的一致性和实时性。 例如,数据库中的数据状态已经…

水晶报表分组分栏_web报表可视化设计器工具推荐

古往今来,信息就是决胜的关键。在科技时代的今天亦是如此。企业的数据管理在帮助企业加强管控、提高竞争力等方面具有不可或缺的作用。这就不得不说到报表工具。企业想要将储存于各种商业信息系统中的数据转化成有用的信息,最终帮助决策者做出更快、更好…

嵌套矩形——DAG上的动态规划

有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础。很多问题都可以转化为DAG上的最长路、最短路或路径计数问题。 题目描述: 有n个矩形,每个矩形可以用两个整数a,b描述,表示它的长和宽。矩形…

Twisted

Twisted定义Twisted是一个基于事件驱动的网络引擎框架网络框架,别人预先定义好的一个框架(一个项目),如.net某个web框架有25个class,从BeginRequest依次执行类里的process方法,程序员自己定义一个类&#x…

从Spring到Java EE 6

我最近在一个非常复杂的项目中工作,其中融合了许多Java EE 6技术(例如JPA,JAXB,JMS,JTA,JAX-RS等)。 出于生产力和计划方面的原因,将原型应用程序设计为独立的纯Spring应用程序。 当…

Centos 6.5 搭建php环境(nginx+mariadb+php7)

1.mariaDb vim /etc/yum.repos.d/MariaDB.repo [mariadb] name MariaDB baseurl http://yum.mariadb.org/5.5/centos5-x86 gpgkeyhttps://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck1#如果服务器已经安装了MariaDB-Galera-server包,你可能需要在安装MariaDB-s…

MAC itunes无法验证服务器s.mzstatic/itunes无法更新服务器解决方案

打开host文件: 一、用终端打开: sudo vi /etc/hosts 输入完这行命令后需要输入电脑密码,然后确认,进入host文件 然后按i键进入编辑模式,在最后一行添加:23.214.233.166 s.mzstatic.com 如下图 添加完后&…

硬币问题——固定终点的最长路和最短路

问题描述&#xff1a; 有n种硬币&#xff0c;面值分别为V1,V2...,Vn,每种都有无限多。给定非负整数S&#xff0c;可以选用多少个硬币&#xff0c;使得面值之和恰好为S&#xff1f;输出硬币数目的最小值和最大值。0 < n < 100, 0 < S < 10000, 1 < Vi < S。 …

读取nas_NAS怎么玩?除了存放小姐姐,它竟然还有这些功能

自从有了电脑&#xff0c;就一直在折腾"存储那点事儿"&#xff0c;说到底&#xff0c;电脑的本质就是存储&#xff0c;而自己弄家用存储方面的东西算下来也有几年了。单机的硬盘存储比较简单&#xff0c;但是随着家里各种设备的增多&#xff0c;各个设备间的文件共享…

ZK Web框架思想

我曾多次被要求提出一些有关ZK的意见。 因此&#xff0c;根据我作为ZK用户4年的经验&#xff0c;以下是一些想法&#xff1a; 总体开发人员经验&#xff0c;社区和文档 “就是这样” ZK提供的大多数东西都能很好地工作&#xff0c;并且如果您以前开发过任何桌面Java应用程序&…

OC第一讲:类和对象

今天终于开始进行OC的学习了 一.首先讲了NSLog NSLog是oc里面的输出语句&#xff0c;其用法和printf差不多&#xff0c;但是还是有差别的 1&#xff0c;NSLog是自动换行的&#xff0c;不用像printf那样还需要加\n&#xff1b; 2&#xff0c;NSLog在引号面前需要添加符号&#x…

【转载】关于 Google Chrome 中的全屏模式和 APP 模式

【来源于】新浪微博&#xff1a;阿博 http://www.cnblogs.com/abel/p/3235839.html 全屏模式&#xff1a;kiosk 默认全屏打开一个网页呢&#xff0c;只需要在快捷方式中加上 --kiosk [url] 就可以了。 关于全屏模式&#xff1a; 1、全屏模式下&#xff0c;广告插件&#xff08;…

PL/SQL Developer跑在Oracle 64位数据库上初始化错误

安装完Oracle(64位)、PL/SQL Developer后运行PL/SQL出现如下的错误&#xff1a; 网上查资料说&#xff0c;我的PL/SQL Developer与ORACLE不兼容&#xff0c;即PL/SQL不支持64位的ORACLE&#xff0c;因此得下一个32位的ORCALE客户端并配置相应的参数&#xff1a; 解决步骤小记&a…

gis 联合 融合_GIS技术进化 | 我们为何需要跨平台GIS技术体系?

10月30日&#xff0c;超图在2019 GIS 软件技术大会上发布了SuperMap GIS 10i系列产品。SuperMap GIS 10i全面融入人工智能(AI)技术&#xff0c;创新并构建了GIS基础软件“BitCC”五大技术体系&#xff0c;即大数据GIS、人工智能GIS、新一代三维GIS、云原生GIS和跨平台GIS&#…

Spring陷阱:代理

作为Spring框架的用户和发烧友多年&#xff0c;我遇到了一些关于此堆栈的误解和问题。 另外&#xff0c;在某些地方抽象非常可怕地泄漏&#xff0c;以便有效&#xff0c;安全地利用开发人员需要意识到的所有功能。 这就是为什么我开始Spring陷阱系列的原因。 在第一部分中&…

UVa11925 Generating Premutations

留坑(p.254) 1 #include<cstdio>2 #include<cstring>3 #include<cstdlib>4 #include<algorithm>5 #include<iostream>6 7 using namespace std;8 9 void setIO(const string& s) { 10 freopen((s ".in").c_str(), "r&qu…

xamarin UWP中MessageDialog与ContentDialog的区别

MessageDialog与ContentDialog的异同点解析&#xff1a; 相同点一&#xff1a;都是uwp应用上的一个弹窗控件。都能做为弹出应用。 相异点一&#xff1a;所在命名空间不同&#xff0c;MessageDialog在Windows.UI.Popups.MessageDialog下&#xff0c;而ContentDialog在Windows.UI…