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

图像的几何变换(缩放、平移、旋转)

图像的几何变换

学习目标

  • 掌握图像的缩放、平移、旋转等
  • 了解数字图像的仿射变换和透射变换

1 图像的缩放

缩放是对图像的大小进行调整,即 使图像放大或缩小

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
#读取图片img1 = cv.imread('lena.png')#图像的缩放#法1    :绝对尺寸rows, cols = img1.shape[:2]
res  = cv.resize(img1 , (2*cols,2*rows),interpolation=cv.INTER_CUBIC)#法二  :相对尺寸
res1 = cv.resize(img1,None,fx=0.5,fy=0.5)#图像显示
cv.imshow("original",img1)
cv.imshow("enlarge",res)
cv.imshow("shrink",res1)
cv.waitKey(0)

结果展示

在这里插入图片描述

2图像的平移

在这里插入图片描述

代码实现

import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltfrom pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']#读取图像
img1 = cv.imread("lena.png")#图像的平移
rows ,cols = img1.shape[:2]
M= np.float32([[1,0,100],[0,1,50]])   #平移矩阵
dst = cv.warpAffine(img1,M,(cols,rows))#图像的显示
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(7,4),dpi=100)
axes[0].imshow(img1[:,:,::-1])
axes[0].set_title("原图")axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("平移后的结果")
plt.show()

结果展示

在这里插入图片描述

3 图像的旋转

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

import numpy as np
import cv2 as cv
import matplotlib.pyplot as pltfrom pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']#读取图像
img = cv.imread("lena.png")#旋转图像rows ,cols = img.shape[:2]
#生成旋转矩阵
M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)
#进行旋转变换
dst = cv.warpAffine(img,M,(cols,rows))#图像展示
fig ,axes = plt.subplots(nrows=1,ncols=2,figsize=(5,4),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("旋转后的结果")plt.show()

M = cv.getRotationMatrix2D((cols/2 ,rows/2),90,1)

  • cols/2 ,rows/2 :旋转中心
  • 90 : 逆时针旋转角度
  • 1:缩放比例(不进行缩放)

结果展示

在这里插入图片描述

http://www.lryc.cn/news/162583.html

相关文章:

  • 计算机网络第四章——网络层(上)
  • 【MyBatis】一、MyBatis概述与基本使用
  • Java事件机制简介 内含面试题
  • springMVC基础技术使用
  • UI设计师的发展前景是否超越了平面设计?
  • MyBatis的基本操作
  • 【Tomcat】在SpringBoot项目中,Tomcat是如何处理HTTP请求的
  • python开发基础篇1——后端操作K8s API方式
  • 【实践篇】Redis最强Java客户端(一)之Redisson入门介绍
  • 掌握AI助手的魔法工具:解密`Prompt`(提示)在AIGC时代的应用(下篇)
  • 十)Stable Diffussion使用教程:Lora
  • kafka学习-消费者
  • Alibaba(商品详情)API接口
  • OLED透明屏触控:引领未来科技革命的创新力量
  • Ubuntu下QT操作Mysql数据库
  • sqli --【1--10】
  • 《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》
  • Wireshark 用命令行分析数据包
  • LVS DR模式负载均衡群集部署
  • 探讨前后端分离开发的优势、实践以及如何实现更好的用户体验?
  • 微博一面:JVM预热,你的方案是啥?
  • open与fopen的区别
  • Unity记录一些glsl和hlsl的着色器Shader逆向代码
  • 基于Sentinel的微服务保护
  • Collectors类作用:
  • LASSO回归
  • 机器学习中的 K-均值聚类算法及其优缺点。
  • 云计算与虚拟化
  • Linux常见进程类别
  • 智能小车之蓝牙控制并测速小车、wife控制小车、4g控制小车、语音控制小车