opencv实现仿射变换

news2024/11/26 13:46:29

什么是仿射变换?

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

代码实现

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

#设置字体
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']

#图像的读取
img = cv.imread("lena.png")

#仿射变换
rows , cols = img.shape[:2]

#创建变换矩阵
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[100,100],[200,50],[100,250]])
M = cv.getAffineTransform(pts1,pts2)

#完成仿射变换
dst = cv.warpAffine(img,M,(cols,rows))

#图像的显示
fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")

axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("放射后结果")
plt.show()

代码讲解

首先,导入所需的库:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
然后,读取图像:

img = cv.imread("lena.png")
这里假设存在名为"lena.png"的图像文件,使用cv.imread()函数将其读取为一个NumPy数组对象,并赋值给变量img。

接下来,定义仿射变换所需的坐标点:

pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[100,100],[200,50],[100,250]])
pts1是原图中的三个点的坐标,pts2是对应的目标仿射后的三个点的坐标。这里选择了两个三角形形状的区域作为示例。

然后,通过这些坐标点获取仿射变换的矩阵:

M = cv.getAffineTransform(pts1,pts2)
使用cv.getAffineTransform()函数根据这两组对应的点,计算得到仿射变换的矩阵,赋值给变量M。

接着,进行仿射变换操作:

dst = cv.warpAffine(img,M,(cols,rows))
使用cv.warpAffine()函数对图像进行仿射变换,将原图img和变换矩阵M作为参数传入,得到仿射后的结果赋值给变量dst。

最后,使用Matplotlib库显示原图和仿射后的结果:

fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("原图")

axes[1].imshow(dst[:,:,::-1])
axes[1].set_title("仿射后结果")
plt.show()
通过创建一个包含2个子图的Figure对象,并调用imshow()函数分别在两个子图上显示原图和仿射后的结果。set_title()函数用于设置子图的标题。最后,使用plt.show()函数显示图像。

注意,代码中的cols和rows是通过img.shape[:2]获取的图像的行数和列数,用于指定仿射变换结果的大小。

效果展示

在这里插入图片描述

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

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

相关文章

计算机视觉与深度学习-全连接神经网络-训练过程-模型正则与超参数调优- [北邮鲁鹏]

目录标题 神经网络中的超参数学习率超参数优化方法网格搜索法随机搜索法 超参数搜索策略粗搜索精搜索 超参数的标尺空间 神经网络中的超参数 超参数 网络结构:隐层神经元个数,网络层数,非线性单元选择等优化相关:学习率、dorpou…

期权如何交易?期权如何做模拟交易?

买卖期权的第一步就是要有期权账户,国内的期权品种有商品期权和ETF期权以及股指期权,每种的开户方式和要求都不同,下文为大家介绍期权如何交易?期权如何做模拟交易? 一、期权交易需要开立一个期权账户,可以…

OpenCV图像金字塔

什么是图像金字塔? 向上采样 :cv.pyrUp(img) 向下采样 : cv.pyrDown(img) 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt#图像的读取 img cv.imread("lena.png")#进行图像采样 up_img cv.pyrUp(img) #上…

互联网3.0 数字原生——数物虚实多维细粒度泛在融合

随着计算机、宽带网、通信技术的飞速发展,互联网技术和软硬件系统也不断演进,催生了一场前所未有的数字化革命。从Web1.0到Web3.0,以及虚拟现实、人工智能和数字孪生等领域的崛起,每一步都勾画出了一个崭新的数字未来,…

云渲染是怎么做到不排队的

云渲染排队严重影响了用户的使用体验,还会导致用户的流失,因此解决渲染不排队的问题对于云渲染平台来说是非常重要的。而作为云渲染平台,自己的机器基本都是固定的,哪如何解决用户渲染排队的问题呢?我们一起来看看全国…

60从零开始学Java之与数字相关的类有哪些?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们在解决实际问题时,会经常对数字、日期和系统设置进行处理,比如在我们的代…

转一篇文章-搜狗输入法出现繁体消除不了怎么办?

省流:ctrlshiftf 详见此人的实验 搜狗拼音突然成繁体字了怎么办? - 简书使用搜狗输入法,总是莫名的出现繁体字,打开设置选择的也是简体,但是打字就是繁体,最近终于摸索出来一次成功解决的方法&#xff0c…

git rebase 修改中间的commit

0. 前言 今天在移植最新版本 kfence 功能的时候,一共需要移植大概40多个 patch,中间有很多patch 存在冲突,需要手动修改后才能合并。当所有的patch 都合并完成进行编译的时候,发现其中一个 patch 手动合并出了个错误。 假如共有…

springboot整合sentinel完成限流

1、直入正题,下载sentinel的jar包 1.1 直接到Sentinel官网里的releases下即可下载最新版本,Sentinel官方下载地址,直接下载jar包即可。不过慢,可能下载不下来 1.2 可以去gitee去下载jar包 1.3 下载完成后,进行打包…

仪表基础知识培训

压力传感器:E+H PMX5x/FMX5x 一、安装:安装注意事项: 1、水平安装时仪表的呼吸孔(1)需要向下安装,并远离污染物。 2、请勿用坚硬的物体擦拭或接触膜片。 3、请勿安装在水泵的入口和搅拌叶附近 二、供电、接线、信号、:二线制,仪表输出4-20mA 三、量程:设置最大最小量程…

VS中cmake多配置构建设置

一.cmake在vs中的使用简介 CMake 是一种跨平台开源工具,用于定义在多个平台上运行的生成过程。 Visual Studio C 和 C 开发不再仅适用于 Windows。 本教程介绍如何在 Windows 和 Linux 上使用 Visual Studio C 进行跨平台开发。 由于它基于 CMake,无需…

VR虚拟展厅——商业领域中不可或缺的工具

VR虚拟展厅已经逐渐在商业领域崭露头角,将实体展厅以三维、立体化的形式还原在线上,企业能够以更加直观、真实的方式展示自身的形象和产品,用户也得以通过VR虚拟展厅全方位了解产品详情,包括图片展示、视频介绍等,更加…

websocket php教程

WebSocket 是 HTML5 提供的一种网络通讯协议,用于服务端与客户端实时数据传输。广泛用于浏览器与服务器的实时通讯,APP与服务器的实时通讯等场景。 相比传统HTTP协议请求响应式通讯,WebSocket协议可以做到实时的双向通讯,服务端可…

Automation Anywhere推出新的生成式AI自动化平台,加速提高企业生产力

在9 月 19 日的Imagine 2023 大会上,智能自动化领域的领导者 Automation Anywhere 宣布对其自动化平台进行扩展。推出了新的 Responsible AI Layer,并宣布了四项关键产品更新,包括全新的 Autopilot,它可以利用生成式 AI &#xff…

IT隔离电源系统在医院电气设计中的应用

【摘要】许多国际标准都对医疗领域,尤其是那些生命攸关的场所,如手术室、重症监护室、心脏监护室等的配电系统作了特殊的规定。现在国际上针对医疗领域中的手术室、ICU、CCU等重要场所通常采用局部“中性点不接地的供电系统”(IEC标准称之为“…

webpack:详解代码分离以及插件SplitChunksPlugin的使用

文章目录 背景入口起点分离基本使用防重复 SplitChunksPlugin插件分离背景基本使用splitChunks.chunkssplitChunks.minChunkssplitChunks.minSizesplitChunks.maxSizesplitChunks.namesplitChunks.cacheGroupssplitChunks.cacheGroups.{cacheGroup}.prioritysplitChunks.cacheG…

智能制造,RFID与流转线碰撞

智能制造,RFID与流转线碰撞 RFID是一种无线通信技术,可以用于实时识别和物品。它通过将包含有信息的标签贴在物品上,利用射频信号进行通信,将物品的信息传输给读取器。读取器可以通过无线方式读取标签上的信息,从而实…

公众环境关注如何提升企业ESG表现(2011-2022年)

参照陶云清(2023)的做法,本团队对来自“科学学与科学技术管理”《公众环境关注如何提升企业ESG表现?—基于外部压力与内部关注的双重视角》一文中的基准回归部分进行复刻。 如何驱动企业在逐利过程中兼顾环境、社会和治理表现&am…

IC业务杂谈-----片内外设、片上外设 和、片外外设的区别

片内外设就是片上外设,同一种意思不同说法而已。 片内外设和片外外设的区别: 片内、外设是两个概念,片内指做成芯片的集成电路内部,简称片内,片外同理显而易见;外设是外部设备的简称,是指集成…

Direct3D融合技术

该技术能使我们将当前要进行光栅化的像素的颜色与先前已已光栅化并处于同一位置的像素的颜色进行合成,即将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成(混合),利用该技术我们可得到各种各样的效果,尤其是透明效果。 在融合…