当前位置: 首页 > news >正文

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

【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.mrgr.cn/news/83293.html

相关文章:

  • HarmonyOS 5.0应用开发——NodeContainer自定义占位节点
  • iOS AES/CBC/CTR加解密以及AES-CMAC
  • MATLAB | 基于Theil-Sen斜率和Mann-Kendall检验的栅格数据趋势分析
  • nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug
  • C#中的Frm_Welcome.Instance.Show(),是什么意思
  • webview_flutter的使用
  • 鸿蒙UI(ArkUI-方舟UI框架)
  • 【MySQL】数据库可视化工具,MySQL命令
  • ue5 按下ctrl,角色蹲下/解除蹲下。添加角色蹲伏动画。动画蓝图和状态机,状态,状态别名
  • kubernetes第六天
  • 01-51单片机LED与独立按键
  • 理解Unity脚本编译过程:程序集
  • .NET framework、Core和Standard都是什么?
  • python学习笔记—16—数据容器之元组
  • 微信小程序——创建滑动颜色条
  • 【前端】【CSS3】基础入门知识
  • 初学stm32 --- ADC单通道采集
  • 英伟达 RTX 5090 显卡赋能医疗大模型:变革、挑战与展望
  • 记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据
  • EasyExcel的应用
  • 基于phpstudy快速搭建本地php环境(Windows)
  • Linux x86_64 程序静态链接之重定位
  • 前端for循环遍历——foreach、map使用
  • CSS基础入门
  • 设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析
  • vue3 面试题:vue3和vue2有什么区别?