opencv图片旋转关于中心旋转任意角度与坐标转换

由四个坐标位置计算中心点和旋转角度 由四个坐标位置计算中心点和旋转角度 import cv2 import numpy as np cnt = np.array(np.float32([[370.44574,562.12952],[326.68903, 591.64380],[ 290.47687, 537.95715],[334.23358, 508.44287]])) # 必须是array数组的形式 rect = cv2.minAreaRect(cnt) # 得到最小外接矩形的(中心(x,y), (宽,高), 旋转角度) print 阅读详情

如下例子,实现图片关于中心旋转任意角度,及坐标变换

import os
import os.path
import cv2
import numpy as np
from math import cos,sin,pi
def rotate_angle(angle,image,center_xy,wh):

    (image_h, image_w) = image.shape[:2]
    cx, cy = image_w / 2, image_h / 2
    r_image=rotate_image(image, angle)
    x,y=center_xy
    r_center_xy=rotate_xy(x,y,angle,cx,cy)
    r_wh=rotate_wh(center_xy,wh,angle,cx,cy)
    return r_image,r_center_xy,r_wh

def rotate_image(image, angle):
    # grab the dimensions of the image and then determine the
    # center
    (h, w) = image.shape[:2]
    (cX, cY) = (w // 2, h // 2)
    # grab the rotation matrix (applying the negative of the
    # angle to rotate clockwise), then grab the sine and cosine
    # (i.e., the rotation components of the matrix)
    M = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0)
    (nW, nH)=(w,h)

    # perform the actual rotation and return the image
    return cv2.warpAffine(image, M, (nW, nH))
def rotate_wh(center_xy,wh,angle,cx,cy):
    '''angle = angle*pi/180
    print('angle,cos(angle)',angle,cos(angle))
    r_wh=np.abs(wh*cos(angle))'''
    s_x,s_y=center_xy-wh/2
    e_x,e_y=center_xy+wh/2
    r_s_x_s_y=rotate_xy(s_x,s_y,angle,cx,cy)
    r_s_x_e_y=rotate_xy(s_x,e_y,angle,cx,cy)
    r_e_x_s_y=rotate_xy(e_x,s_y,angle,cx,cy)
    r_e_x_e_y=rotate_xy(e_x,e_y,angle,cx,cy)
    r_x_y=np.array([r_s_x_s_y,r_s_x_e_y,r_e_x_s_y,r_e_x_e_y])

    min_xy=np.min(r_x_y,axis=0)
    max_xy=np.max(r_x_y,axis=0)
    return max_xy-min_xy
def rotate_xy(x,y,angle,cx,cy):

    """
    点(x,y) 绕(cx,cy)点旋转
    """
    angle = angle*pi/180
    x_new = (x-cx)*cos(angle) - (y-cy)*sin(angle)+cx
    y_new = (x-cx)*sin(angle) + (y-cy)*cos(angle)+cy
    return x_new,y_new

def save_image(image_path,image):
    cv2.imwrite(image_path,image)
    print('save image to path:',image_path)



image=cv2.imread('C:/Develop/AI/datasets/chest_ct/images/test2/688604_0.jpg')
image_rect=image*1
center_xy=np.array([150,250])
wh=np.array([100,50])
s_x,s_y=center_xy-wh/2
e_x,e_y=center_xy+wh/2
s_x,s_y,e_x,e_y=int(s_x),int(s_y),int(e_x),int(e_y)
cv2.rectangle(image, (s_x,s_y), (e_x,e_y), (0,255,255), 1)

angle=360
r_image,r_center_xy,r_wh=rotate_angle(angle,image,center_xy,wh)

s_x,s_y=r_center_xy-r_wh/2
e_x,e_y=r_center_xy+r_wh/2   
s_x,s_y,e_x,e_y=int(s_x),int(s_y),int(e_x),int(e_y)   
cv2.rectangle(r_image, (s_x,s_y), (e_x,e_y), (0,0,255), 1)
cv2.imwrite('C:/Develop/AI/datasets/chest_ct/images/test2/688604_0_rotate.jpg', r_image);

运行结果:黄色框为原图的坐标,转换后获取包含其的红色的框输出

参考博文:

图像旋转--矩阵变换

opencv+python3.6图像旋转、并保持图像像素大小不变、不被裁剪(旋转90/180/270度

不同坐标系下3D bbox通过中心点坐标和长宽高求8个角点问题 1.根据长(l)宽(w)高(h)计算出一个和正向运动方向重合的3D bbox的8个角点坐标向量: 2.根据3D bbox的朝向角(rotation angle)构建旋转矩阵与8个角点的坐标相称以将8个点旋转到实际位置,不同3D坐标系下,无论是相机坐标系还是雷达坐标系还是其他3d坐标系下,旋转问题处理起来其实是相同的,关键是看绕哪个轴旋转以及朝向角的正/负方向,也就是说无论坐标系定义其 x,y,z实际指向哪里,我们都只需看绕哪个轴旋转以及旋转角度的值(已含正/负方向)即可定义出对应的 阅读详情

相关推荐

图像旋转技术:原理、实现与优化实践

图像旋转是计算机视觉中基础的几何变换操作,其核心原理是通过旋转矩阵实现像素坐标的空间映射。从技术实现来看,OpenCV的仿射变换、Pillow的简洁API以及CSS3的前端方案各有适用场景,其中OpenCV凭借CUDA加速可获得5倍性能提升。在OCR预处理、医学影像分析等实际应用中,精确的角度控制与黑边处理直接影响后续算法效果。特别在处理批量文档扫描件时,自动化旋转能节省90%以上的处理时间。随着WebAssembly等新技术的应用,浏览器端也能实现接近原生性能的图像旋转。

weixin_34323858的博客 385

Halcon示例之根据矩形中心和旋转角度求矩形角点

得益于(鸟叔)咋咋鸟的视觉平台和众网友的无私奉献,学习了不少知识和技巧;也学习下大神们的分享和奉献精神,分享一个实例源代码:根据矩形的中心坐标和矩形的旋转角度求矩形四个角点坐标;需要说明的是:我们是处理图像中的信息,即输入信息和输出信息都是以图像坐标系为参考的,而图像坐标系常见的样子是水平(X轴)向右为正,垂直(Y轴)向下为正,其实这是所谓的2D笛卡尔坐标系,属于左手坐标系;但是矩形的旋转角度,却...

$firecat利白的代码足迹$ 5253

在平面内,已知矩形的中心点坐标、长、宽和倾斜角度,求矩形四个角点的坐标

实现思路: 1、已知矩形的中心点坐标、长和宽,求矩形在不旋转的情况下矩形的四个顶点坐标; 2、再求按逆时针旋转一定角度后的四个点坐标; (在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度,求旋转后的角坐标. 也就是已知半径,求每个点旋转后的坐标.) ...

m0_37957160的博客 9856

【OpenCV 例程200篇】27. 图像的旋转(以任意点为中心)

图像以任意点 (x0, y0) 为旋转中心、顺时针旋转角度 θ 的旋转操作,可以先将原点平移到旋转中心 (x0, y0) ,然后按照原点旋转,最后再平移回坐标原点。 按上式构造旋转变换矩阵 MAR,由函数 **cv2.warpAffine** 可以计算变换后的绕原点旋转图像。 OpenCV 提供了 **cv2.getRotationMatrix2D** 函数, 根据旋转角度和位移计算旋转变换矩阵 MAR。...

youcans的博客 1万+

BMP位图处理实战:缩放与旋转算法实现

先封装一个通用的数据结构:// 像素缓冲区int width;// 宽度int height;// 高度// 通道数(通常为3)// 每行物理字节数(含padding)// 错误信息这样做的好处是便于传递和释放资源。你可以把它想象成 OpenCV 中的Mat,只不过完全由你自己控制。你可能会问:“现在都有OpenCV了,为啥还要懂这些底层细节?答案很简单:因为你永远不知道下一个bug藏在哪里。

weixin_33610780的博客 793

突破III-V/硅混合集成的挑战:UTC光电探测器能带工程仿真实践

本文探讨了UTC光电探测器在III-V/硅混合集成中的能带工程仿真实践,通过Ansys Lumerical平台实现多物理场仿真,解决晶格失配和能带不连续性等关键挑战。文章详细介绍了FDTD光学仿真和CHARGE电学仿真方法,优化器件性能,提升响应度和带宽,为高速光通信和量子计算提供技术支持。

weixin_29219539的博客 297

opencv将图片绕中心点旋转任意角度后嵌入另一张图片中心并记录相关坐标点位置信息

import cv2 import numpy as np import math import os import pandas as pd def __blend_imgquadbox(image1, image2, bbox,label, image_coordinate=None, scale=1.5): assert label.shape[0]==bbox.shape[0] ...

Haku_yyf的博客 1404

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 329

Java实现图片任意角度旋转

Java普通方法实现图片旋转: import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOExc...

wxp0719的博客 775

别再只怪贴片厂了!从MLCC内部裂纹,看懂物料质量与工艺应力的博弈

本文深入分析了MLCC内部裂纹的失效原因,提供了从裂纹形态学到生产全流程的失效风险地图的完整分析框架。通过实战案例和检测技术组合,帮助工程师精准锁定MLCC失效背后的真凶,优化物料质量和工艺应力管理。

weixin_33122947的博客 293

sentaurus学习笔记(VDMOS仿真)(三)

在Sentaurus中,这通常意味着在2D仿真中,x轴指向下,y轴指向右。定义了在2D模拟中,网格尺寸按照一定的增长率进行扩展,这里的增长率为2.0,意味着远离最小尺寸区域的网格单元大小将是最小尺寸的两倍。定义了2D模拟中网格单元的最小尺寸为0.001微米,这有助于控制网格的最小大小,从而影响仿真的精度和计算成本。表示启用中等级别的日志信息输出,这有助于用户了解仿真过程中发生的事件和可能的问题。表示启用保存调试文件,这可以帮助用户在仿真过程中检查和验证模型的状态。这行代码设置了仿真过程中使用的线程数。

qq_52640792的博客 1807

Python OpenCV3:OpenCV 几何变换

1. 图像缩放 缩放是对图像的大小进行调整,即放大或缩小。 cv2.resize(src, dsize, fx, fy, interpolation) 参数: src 输入图像 dsize 绝对尺寸,直接指定调整后图像的大小 fx,fy 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可 interpolation 插值方法: cv.INTER_LINEAR 双线性插值 cv.INTER_NEAREST 最近邻插值 cv.INTER_AREA 像素区域重采样(默认

Amzmks的博客 1244

SAP MM 物料描述MAKTX 40个字符不够用的问题处理

SAP物料描述表,长度40个字符一般情况下,40个字符在描述中也够用了,但是要加上规格之类的额外描述就不一定了,特别是对于辅助件-刀具。解决方案一:对maktx增强,换成CHAR80或者CHAR100的,但是风险较大,涉及到好多地方,另外SAP+ 算号器 也不支持。解决方案二:增强字段。内部顾问,建议在 那就在这里加一个字段,具体过程如下:1、创建域2、创建架构3、附加架构4、GUI 设置 5、后台设置6、MASS/MM17字段新增。过程1、创建域 SE112、创建结构 se11 3、MARA附加架构

GAVIN 4731

OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔

1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小。 API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参数: src : 输入图像 dsize: 绝对尺寸,直接指定调整后图像的大小 fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可 interpolation:插值方法

小李的研究生学习日记 4584

spyglass之功耗分析

用于功耗分析的软件除了ptpx外,spyglass也可以。ptpx的功耗分析是基于netlist(网表)进行的,一般用于分析综合后的pre功耗和P&R后的post功耗,但这已经是项目进行到比较后期了,如果后期发现功耗数据与我们目标功耗相差较大,则意味着需要功耗优化,这时有可能会将项目计划节点延迟。如果在前期designer可以获得设计模块的功耗数据,可提早优化功耗,spyglass则为designer提供了一个很好的手段去评估功耗,从而提前优化功耗。

u011974971的博客 9202

手把手打通全流程:在华为昇腾310/Atlas 200DK上实现深度学习模型从移植到部署

通过以上步骤,你已成功在华为昇腾310 Atlas 200DK上完成深度学习模型的移植与推理。这一流程可复用到目标检测、语义分割等其他任务,快去尝试将自己的AI模型部署到昇腾设备上,打造属于你的边缘智能应用吧!上部署深度学习模型,这篇教程将带你走完从模型转换到推理运行的完整流程。无需担心技术壁垒,我们以通俗易懂的方式拆解每一步,让你轻松在昇腾嵌入式设备上实现AI应用。是专为边缘AI设计的高性能处理器,Atlas 200DK是其开发板形态,能高效运行图像分类、目标检测等深度学习任务。

FJN110的博客 183

图像旋转算法与实现

图像旋转是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程。当然这个点通常就是图像的中心。既然是按照中心旋转,自然会有这样一个属性:旋转前和旋转后的点离中心的位置不变. 根据这个属性,我们可以得到旋转后的点的坐标与原坐标的对应关系。由于原图像的坐标是以左上角为原点的,所以我们先把坐标转换为以图像中心为原点。假设原图像的宽为w,高为h,(x0,y0)为原坐标内的一点,转换坐标后的点为(x...

weixin_30362801的博客 424

QEMU源码全解析 —— virtio(3)

QEMU源码全解析 —— virtio(3)

phmatthaus的专栏 1849

别再手动改JSON了!用Python脚本一键搞定Labelme数据集的镜像与旋转增强

本文介绍了一种使用Python脚本自动化处理Labelme数据集的方法,实现镜像翻转和旋转增强,避免手动修改JSON标注文件的繁琐工作。通过Pillow库处理图像变换,自动计算并更新标注点坐标,大幅提升数据增强效率,适用于计算机视觉项目中的数据集扩充需求。

weixin_30417487的博客 103

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OpenCV图像处理(上)几何变换+形态学操作

那什么是图像的仿射变换,如下图所示,图1中的点1,2和3与图二中三个点一一映射,仍然形成三角形,但形状已经大大改变,通过这样两组三点(感兴趣点)求出仿射变换,接下来我们就能把仿射变换应用到图像中所有的点中,就完成了图像的仿射变换。因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。需要注意的是,对于图像而言,宽度方向是x,高度方向是y,坐标的顺序和图像像素对应下标一致。...

mengxianglong123的博客 1439

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【参考黑马のOpencv图像处理学习笔记】opencv图像处理几何变换

几何变换 学习目标 掌握图像的缩放,平移,旋转等 了解数字图像的仿射变换和透射变换 1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小。 API src : 输入图像 dsize: 绝对尺寸,直接指定调整后图像的大小 fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可 interpolation:插值方法, 参数: 示例 ...

qq_58964020的博客 380

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OpenCV学习笔记(三):OpenCV图像处理1

OpenCV图像处理 本章的主要内容, 包括如下: 图像的几何变换 图像的形态学转换 图像的平滑方法 直方图的方法 边缘检测的方法 模板匹配和霍夫变换的应用 1 几何变换 学习目标 掌握图像的缩放,平移,旋转等 了解数字图像的仿射变换和透射变换 1.1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小。 API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参数: import cv2 as cv

想要上南大的同学的博客 1108

OpenCV学习笔记(2)

一、图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小。 cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参数: src : 输入图像 dsize: 绝对尺寸,直接指定调整后图像的大小 fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可 interpolation:插值方法 import cv2 as cv import matplo

m0_64281554的博客 328

OpenCV视频学习笔记(10)-项目实战-文档扫描OCR识别

十、项目实战-文档扫描OCR识别 实践步骤: 首先将包含代码的文件夹复制到opencv工程中; 打开sacn.py; 配置图片参数:RUN–>Edit Configurations–>scan–>Parameters输入–image ./images/receipt.jpg–>apply 代码处理步骤: (1)读取图片(图片拍摄角度任意); (2)边缘检测; (3)轮廓检测; (4)一系列图片变换操作(平移、旋转、翻转),把图片位置调正; (5)字符识别,中文、英文、数字; 因为作者

weixin_41802429的博客 595

二、opencv图像处理

1 图像缩放 缩放是对图像的大小进行调整,即使图像放大或缩小。 API cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) 参数: src : 输入图像 dsize: 绝对尺寸,直接指定调整后图像的大小 fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可 interpolation:插值方法 插值 含义

Nontele的博客 4333

OpenCV(Python 版)

计算机中的图像本质上是由无数像素组成的网格,彩色图像通常通过红(R)、绿(G)、蓝(B)三个独立的颜色通道来记录信息,每个通道都是一个二维数字矩阵,矩阵中的数值代表对应位置像素该颜色的亮度(通常为 0-255),三个通道的数值组合决定了像素最终呈现的颜色,计算机存储的就是这些通道矩阵数据,以及图像的宽、高、通道数等元信息。

qq_32381773的博客 409
上一篇: 阿里云持续集成平台(云效),部署节点成功运行,经验记录一下
下一篇: Robocorp本地开发环境Mac安装
lld2002
博客等级 码龄19年 15粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值