python学opencv|读取图像(二十九)使用cv2.getRotationMatrix2D()函数旋转缩放图像

devtools/2025/1/12 17:39:10/

【1】引言

前序已经学习了如何平移图像,相关文章链接为:

python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像-CSDN博客

在此基础上,我们尝试旋转图像的同时缩放图像。

【2】核心代码

前序学习进程中,已经知晓平移图像的核心代码是设置M矩阵,使其按照两行三列的形式,通过改变第三列的值来移动图像:

此时的M矩阵有两个可选变量x和y:

M=[[1,0,x],

      [0,1,y]],

当x>0,图像向右移动x大小的位置;当y>0,图像向右下移动y大小的位置;当x和y取负值时图像分别向左和向上运动。

当我们想旋转图像使,需要调用一个cv2.getRotationMatrix2D()函数来实现旋转。

这个函数的名字也很简单,拆开来就是cv.get Rotation Matrix2D(),直译就是对二维矩阵进行旋转的意思。

点击下方链接,直达cv2.getRotationMatrix2D()函数的官网学习教程:

OpenCV: Geometric Image Transformations

在这里,会看到:

图1

函数有三个参数:

Mat cv::getRotationMatrix2D     (     Point2f     center, #旋转中心,需要提前定义好
        double     angle, #旋转角度
        double     scale ) #缩放倍数

【3】代码测试

在这里,需要提前定义旋转中心:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
src = cv.imread('src.png')
rows=len(src) #读取图像行数
cols=len(src[0]) #读取图像列数
center=(rows/2,cols/2) #旋转中心

然后就是调用cv2.getRotationMatrix2D()函数设置旋转和缩放属性:旋转60度,缩小为原来的0.8倍。

M=cv.getRotationMatrix2D(center,60,0.8) #旋转并缩放图像

然后依然要使用cv.warpAffine()函数来生成输出图像:

dst=cv.warpAffine(src,M,(cols,rows)) #输出图像

最后屏幕输出和保存:

cv.imshow('src-pingyi', dst)  # 在屏幕展示绘制圆形的效果
cv.imwrite('src-pingyi0.png', dst)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

此处使用的原图依然是: src.png

图1 src.png

代码运行后的输出为:

图2 旋转60度,缩小为原来的0.8倍

【4】细节说明

约定旋转中心的时候,如果是以原图的中心为依据,应该以(rows/2,cols/2)为旋转中心。

【5】结论

掌握了python+opencv实现图像旋转+缩放的操作技巧。


http://www.ppmy.cn/devtools/149550.html

相关文章

如何进行单体前后端项目的微服务改造

如何进行单体前后端项目的微服务改造 引言 随着互联网技术的快速发展,传统的单体架构(Monolithic Architecture)逐渐显现出其局限性。对于大型应用来说,单体架构可能会导致开发效率低下、部署困难以及扩展性差等问题。因此&…

Postman接口测试03|执行接口测试、全局变量和环境变量、接口关联、动态参数、断言

目录 七、Postman 1、安装 2、postman的界面介绍 八、Postman执行接口测试 1、请求页签 3、响应页签 九、Postman的环境变量和全局变量 1、创建环境变量和全局变量可以解决的问题 2、postman中的操作-全局变量 1️⃣手动设置 2️⃣代码设置 3️⃣界面获取 4️⃣代…

RabbitMQ基础(简单易懂)

什么是RabbitMQ? 它基于AMQP协议(Advanced Message Queuing Protocol),一种为应用构建消息队列的标准协议。过程中,它提供了一些重要模块:为消息发送的Producer(生产者)&#xff0c…

C++ 的 pair 和 tuple

1 std::pair 1.1 C 98 的 std::pair 1.1.1 std::pair 的构造 ​ C 的二元组 std::pair<> 在 C 98 标准中就存在了&#xff0c;其定义如下&#xff1a; template<class T1, class T2> struct pair;std::pair<> 是个类模板&#xff0c;它有两个成员&#x…

Java聊天小程序

拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…

大模型WebUI:Gradio全解11——Chatbots:融合大模型的多模态聊天机器人(2)

大模型WebUI&#xff1a;Gradio全解11——Chatbots&#xff1a;融合大模型的聊天机器人&#xff08;2&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.2 使用流行的LLM库和API11.2.1 Llama Index11.2.2 LangChain11.2.3 OpenAI1. 基本用法2. …

notebook主目录及pip镜像源修改

目录 一、notebook主目录修改二、pip镜像源修改 一、notebook主目录修改 在使用Jupyter Notebook进行数据分析时&#xff0c;生成的.ipynb文件默认会保存在Jupyter的主目录中。通常情况下&#xff0c;系统会将Jupyter的主目录设置为系统的文档目录&#xff0c;而文档目录通常位…

Spring Boot整合SSE实时通信

服务器发送事件&#xff08;Server-Sent Events, SSE&#xff09;是一种让网页实时更新的技术。想象一下&#xff0c;您正在浏览一个网页&#xff0c;而这个网页需要在有新信息时自动更新&#xff0c;比如新闻网站的最新消息、社交媒体的通知或股票市场的价格变动。SSE使得这种…