opencv-图像几何处理
缩放
缩放只是调整图像的大小。为此,opencv提供了一个cv2.resize()函数,可以手动指定图像大小,也可以指定缩放因子。你可以使用任意一种方法调整图像的大小:
import cv2
from matplotlib import pyplot as pltlogo = cv2.imread('logo.png')
logo_mini = cv2.resize(logo, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)
# 或者这样
# height, width = logo.shape[:2]
# logo_mini = cv2.resize(logo, (int(0.5 * height), int(0.5 * width)), interpolation=cv2.INTER_CUBIC)plt.subplot(121),plt.imshow(logo, 'gray'),plt.title('logo')
plt.subplot(122),plt.imshow(logo_mini, 'gray'),plt.title('logo_mini')
plt.show()
效果如下:

请看logo_mini的宽高与原图缩小了一半!resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)参数详解如下:
- src: 输入图像
- dsize: 修改后的图片宽高
- dst: 输出图像
- fx: 比例因子(宽度),0.5表示宽度缩放成原来的一半
- fy: 比例因子(高度),0.5表示高度缩放成原来的一半
- interpolation: 插值法
平移
平移是物体位置的移动。如果您知道 (x, y) 方向的偏移,让它成为(tx, ty),M你可以按如下方式创建变换矩阵:
M = [[1, 0, tx], [0, 1, ty]]
你可以把它变成一个np类型的Numpy数组。np.float32()传递到cv2.warpAffine()函数,请看下面栗子:
import cv2
import numpy as np
from matplotlib import pyplot as pltlogo = cv2.imread('logo.png')
rows, cols = logo.shape[:2]
# 水平向右平移50个像素,垂直向下平移100个像素
M = np.float32([[1, 0, 50], [0, 1, 100]])
dst = cv2.warpAffine(logo, M, (cols, rows))
plt.subplot(121),plt.imshow(logo, 'gray'),plt.title('logo')
plt.subplot(122),plt.imshow(dst, 'gray'),plt.title('dst')
plt.show()
效果如下:

从效果图可以看到,图片水平向右移动了50个像素,垂直向下移动了100个像素。warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)参数详解如下:
- src: 输入图像
- M: 2X3的变换矩阵
- dsize: 指定图像输出尺寸
- dst: 输出图像
- flags: 插值算法标识符
旋转
旋转跟平移一样,同样是通过cv2.warpAffine()函数来实现的。在上面我们知道这个函数接收一个变换矩阵,为了得到这个变换矩阵,OpenCV 提供了一个函数cv2.getRotationMatrix2D()。下面我们来实现,将logo图像以中心点为圆心,逆时针旋转90度,代码如下:
import cv2
import numpy as np
from matplotlib import pyplot as pltlogo = cv2.imread('logo.png')
rows, cols = logo.shape[:2]
M = cv2.getRotationMatrix2D((int(cols / 2), int(rows / 2)), 90, 1)
dst = cv2.warpAffine(logo, M, (cols, rows))
plt.subplot(121),plt.imshow(logo, 'gray'),plt.title('logo')
plt.subplot(122),plt.imshow(dst, 'gray'),plt.title('dst')
plt.show()
效果如下:

从效果图可以看到,图片围绕中心点逆时针旋转了90度。getRotationMatrix2D(center, angle, scale)参数详解如下:
- center: 旋转的中心点
- angle: 旋转角度,正数为逆时针,负数为顺时针
- scale: 缩放因子
仿射变换
在仿射变换中,原始图像中的所有平行线在输出图像中仍将平行。为了找到变换矩阵,我们需要输入图像中的三个点及其在输出图像中的对应位置。我们可以使用cv2.getAffineTransform()函数将创建一个2*3矩阵,该矩阵将传递给cv2.warpAffine()函数,使用如下:
import cv2
import numpy as np
from matplotlib import pyplot as pltqipan = cv2.imread('qipan.png')
# 在棋盘中描三个点
cv2.circle(qipan, (103, 103), 5, (255, 0, 0), -1)
cv2.circle(qipan, (103, 196), 5, (255, 0, 0), -1)
cv2.circle(qipan, (196, 103), 5, (255, 0, 0), -1)
rows, cols = qipan.shape[:2]
pts1 = np.float32([[103, 103], [103, 196], [196, 103]])
pts2 = np.float32([[30, 120],[200, 50],[80, 220]])
M = cv2.getAffineTransform(pts1, pts2)
dst = cv2.warpAffine(qipan, M, (rows, cols))
plt.subplot(121),plt.imshow(qipan, 'gray'),plt.title('qipan')
plt.subplot(122),plt.imshow(dst, 'gray'),plt.title('dst')
plt.show()
效果如下:

从效果图可以看到,原始图像中的所有平行线在输出图像中仍然平行。getAffineTransform(src, dst)参数详解如下:
- src: 输入图像的三个点坐标
- dst: 输出图像的三个点坐标
透视变换
对于透视变换,你需要一个3*3变换矩阵,即使在变换之后,直线仍将保持笔直。要找到这个变换矩阵,你需要输入图像上的4个点和输出图像上对应的点。我们可以通过函数cv2.getPerspectiveTransform()找到变换矩阵,然后再将这个变换矩阵应用到cv2.warpPerspective()函数当中,使用如下:
import cv2
import numpy as np
from matplotlib import pyplot as pltqipan = cv2.imread('qipan-1.png')
pst1 = [[88, 30], [812, 30], [37, 848], [900, 832]]
pst2 = [[0, 0], [500, 0], [0, 500], [500, 500]]
# 在原图上绘制4个点
cv2.circle(qipan, pst1[0], 5, (255, 0, 0), -1)
cv2.circle(qipan, pst1[1], 5, (255, 0, 0), -1)
cv2.circle(qipan, pst1[2], 5, (255, 0, 0), -1)
cv2.circle(qipan, pst1[3], 5, (255, 0, 0), -1)
# 获取变换矩阵
M = cv2.getPerspectiveTransform(np.float32(pst1), np.float32(pst2))
# 透视变换
dst = cv2.warpPerspective(qipan, M, (500, 500))
# 在输出图像中再绘制4个点
cv2.circle(dst, pst2[0], 5, (255, 0, 0), -1)
cv2.circle(dst, pst2[1], 5, (255, 0, 0), -1)
cv2.circle(dst, pst2[2], 5, (255, 0, 0), -1)
cv2.circle(dst, pst2[3], 5, (255, 0, 0), -1)
plt.subplot(121),plt.imshow(qipan, 'gray'),plt.title('qipan')
plt.subplot(122),plt.imshow(dst, 'gray'),plt.title('dst')
plt.show()
效果如下:

从效果可以看出,即使在变换之后,直线仍将保持笔直!cv2.getPerspectiveTransform(src, dst, solveMethod=None)参数详解如下:
- src: 源图像中四边形顶点的坐标
- dst: 目标图像中相应四边形顶点的坐标
cv2.warpPerspective(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)参数详解如下:
- src: 输入图像
- M: 3X3的变换矩阵
- dsize: 指定图像输出尺寸
- dst: 输出图像
- flags: 插值算法标识符
相关文章:
opencv-图像几何处理
缩放 缩放只是调整图像的大小。为此,opencv提供了一个cv2.resize()函数,可以手动指定图像大小,也可以指定缩放因子。你可以使用任意一种方法调整图像的大小: import cv2 from matplotlib import pyplot as pltlogo cv2.imread(…...
[前端笔记030]vue之hello、数据绑定、MVVM、数据代理、事件处理、计算属性和监视属性
前言 本笔记参考视频,尚硅谷:BV1Zy4y1K7SH p1 -p25官网文档完善,本文只做笔记使用,官网下载vue的开发版和生产版或者使用CDN,并去谷歌商店下载开发插件 简介 组件化模式,提高代码复用率,更好维护声明式编…...
每天学一点之注解、元注解
注解 1、注解概述 定义: 注解(Annotation),也叫元数据。与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 作用分类&#…...
STA环境
目录1. CMOS逻辑门2. 波形3. 时钟3.1. 指定时钟create_clock时钟延迟set_clock_latency 时钟不确定度set_clock_uncertainty 跨时钟域set_false_path3.2. 衍生时钟3.3. 虚拟时钟4. 时序路径2.1. 输入路径2.2. 输出路径2.3. 点对点约束本文介绍在执行静态时序分析(St…...
嵌入式系统实践 12 ——基于ARM汇编 Keil5 MSP432 P401R开发板
物联网实验1 阿里云远程控制小灯 ///****************************************************************************** // * // * MSP432P401 // * ----------------- // * | | // * | |…...
【密码学篇】密码行业标准汇总(GM)
【密码学篇】密码行业标准汇总(GM) 截止到2023年03月10日,共130个密码行业标准,适用商用密码应用与安全性评估等密码行业,可点击链接预览或下载标准—【蘇小沐】 文章目录【密码学篇】密码行业标准汇总(GM…...
桌面文件删除后没有在回收站原因和恢复方法
桌面误删文件回收站也没有怎么办?遇到电脑桌面文件误删了,重要数据回收站找不回这种情况不要慌!如今数据恢复技术很成熟,许多文件丢失问题都能够成功解决。下面我们就一起来了解下桌面误删文件回收站没有的原因和相关文件恢复方法…...
什么是业务运营?关键组成部分有哪些?
企业领导者使用收入运营和智能软件等技术来分析买家的不同接触点。这些见解决定了客户互动的成败,从而改善了业务运营,从而带来了成功。 什么是业务运营? 业务运营包括企业为保持盈利而执行的一系列日常任务。虽然这些任务可能因业务类型或行…...
腾讯云新用户怎么配置服务器的方法教程
腾讯云新用户怎么配置服务器?腾讯云服务器配置选择攻略,先选择云服务器地域和可用区,然后根据用户使用场景需要平衡型、计算型或高IO型等特性来选择云服务器CVM实例规格,主机教程网来详细说下腾讯云服务器配置选择攻略。 1、腾讯云…...
windows 11系统,通过ip地址远程连接连接ubuntu 22.04系统(共同局域网下,另一台主机不需要联网)
windows 11系统,通过ip地址远程连接连接ubuntu 22.04系统(不需要联网)问题来源问题分析解决方案问题来源 自己搭建了一台ubuntu系统作为深度学习的机器,但是学校的网络问题,一个账号只能同时登录3台设备。通过远程连接…...
头脑风暴(一):Controller层前端传参接收;在Service层实现类中?为何要build相关构建器?添加套餐业务分析
文章目录1 MyBatis中Controller层List集合接收数据,泛型添加与否1.1 案例场景1.2 应该用什么接收1.3 是否可以用其他方式接收?1.4 LIst集合接收可否不指定泛型1.5 mybatis中使用基本类型接收数据?resultType是集合中的元素的类型,…...
vue-cropper 拖动图片和截图框
现象 开发遇到vue--cropper不能拖动图片和截图框 解决方法 can-move-box设置为true,表示可以拖动截图框 can-move设置为true,表示可以拖动图片 *注意: 我外层套了一个el-col, el-col的宽高一定要大于截图框的宽高,否则移动不了…...
[Linux基础]history相关的环境变量设置
目录 背景 简介 命令操作 1. 语法: 2. 功能 3. 参数 环境变量设置 背景 工作中时常收到客户的反馈,我的系统什么也没干,就出现文件丢失,程序错误等等问题;我们在问题排查的时候查看history信息也是重要环节…...
怎么给电脑分盘与合并磁盘?教你三招
电脑只有一个C盘,想要再分出一个或多个分区,怎么办?电脑C盘的容量太小,太容易满了,想重新分盘,或者把其他盘跟它合并,但因为文件太多备份实在是太麻烦,怎么办?怎么给电脑…...
HCIP-5.4OSPF路由聚合、缺省路由
1、路由聚合 OSPF 是一种链路状态路由协议,因此 OSPF路由器不传输路由,而是传输链路状态信息。因此,OSPF 路由通过汇总 LSA 来控制链路状态信息的传输,从而减小 LSDB 数据库的大小,进而控制路由的汇总。 由于OSPF路由…...
【数据结构】——树与二叉树
文章目录树二叉树二叉树的性质完全二叉树二叉树的存储遍历二叉树和线索二叉树6.4 树和森林哈夫曼树应用树 树的定义:树是以分支关系定义的层次结构。 D; 树(Tree)是n(n≥0)个结点的有限集。 R 数据关系 有且仅有一个特定的称为根(Root) 的结点 当n>1时&…...
等离子纳秒高压脉冲电源维修HVP-20 P
等离子纳秒高压脉冲电源维修HVP-20 P;HVP-10B;HVP-05;HVP-02等型号均可维修 HVP-20 P(N)用于气体放电与低温等离子体的高性能纳秒高压脉冲电源。 HVP-20P(N)采用专有的marx电路,实现高压脉冲电源参数的便捷可调,包括峰值电压0 – 20 KV (-2…...
JavaScript内改变this指向
之前我们说的都是代码内 this 的默认指向今天我们要来说一下如何能改变 this 指向也就是说, 你指向哪我不管, 我让你指向哪, 你就得指向哪开局在函数的原型( Function.prototype ) 上有三个方法callapplybind既然是在函数的原型上, 那么只要是函数就可以调用这三个方法…...
Cobalt Strike---(2)
数据管理 Cobalt Strike 的团队服务器是行动期间Cobalt Strike 收集的所有信息的中间商。Cobalt Strike 解析来 自它的 Beacon payload 的输出,提取出目标、服务和凭据。 如果你想导出 Cobalt Strike 的数据,通过 Reporting → Export Data 。Cobalt Str…...
docker的命令使用和相关例子
Docker是一种流行的容器化平台,可以帮助开发人员更轻松地构建、发布和管理应用程序。下面是一些Docker的命令使用和相关例子: Docker镜像相关命令: 搜索Docker镜像: docker search 例子:docker search ubuntu 下载D…...
“Minwa不是滤镜,是语法”——20年数字艺术总监拆解其底层视觉语义树:从笔触熵值到文化编码层级的7阶解析模型
更多请点击: https://intelliparadigm.com 第一章:“Minwa不是滤镜,是语法”——一场视觉范式的认知升维 在传统图像处理语境中,“滤镜”常被理解为对像素的后置修饰层——一种不可逆、非结构化、依赖预设参数的视觉覆盖。Minwa …...
VSCode安装clang-format插件及使用
VSCode安装clang-format插件及使用1.clang-format插件安装2.安装真正的格式化工具clang-format3.生成.clang-format配置文件并修改4.修改配置文件4.1全局配置文件修改4.2工作空间配置文件修改5.格式化代码1.clang-format插件安装 插件安装方式分为直接安装和离线安装两种。 直…...
工程师视角:礼品卡系统设计缺陷分析与安全消费指南
1. 从“设计工具”到“消费陷阱”:一位工程师的假日购物避坑指南又到年底了,办公室里讨论“给客户/团队送什么礼物好”的声音又多了起来。作为一名在电子设计自动化(EDA)和可编程逻辑工具领域泡了十几年的工程师,我习惯…...
半导体诊断技术:从扫描逻辑到根因解卷积
1. 半导体诊断技术演进与挑战 在半导体制造领域,诊断技术始终扮演着至关重要的角色。想象一下,当芯片在测试阶段出现故障时,工程师们就像医生面对病患一样,需要通过一系列"检查手段"来定位问题根源。扫描逻辑诊断&#…...
Axon:极简AI代理命令行工具,无缝集成自动化工作流
1. 项目概述:一个极简主义的AI代理命令行工具如果你和我一样,对市面上那些动辄需要复杂环境配置、依赖一大堆库、启动缓慢的AI代理工具感到疲惫,那么Axon的出现,绝对会让你眼前一亮。它不是一个运行在后台的守护进程,也…...
别再为本科毕业论文熬大夜!Paperxie 智能写作,一键搞定终稿的正确姿势
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 又到了本科毕业论文冲刺的季节,多少同学还在对着空白文档发呆?选题纠结半天定不下来&…...
ComfyUI IPAdapter Plus完整指南:5个步骤掌握AI图像风格迁移技术
ComfyUI IPAdapter Plus完整指南:5个步骤掌握AI图像风格迁移技术 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus ComfyUI IPAdapter Plus是ComfyUI平台上功能强大的图像引导生成插件&#x…...
FPGA仿真库配置避坑指南:Xilinx 7系、Altera Cyclone V、Lattice ECP5在ModelSim 10.6d下的完整流程
FPGA仿真库配置避坑指南:Xilinx 7系、Altera Cyclone V、Lattice ECP5在ModelSim 10.6d下的完整流程 第一次在ModelSim 10.6d环境下配置FPGA仿真库时,我花了整整三天时间排查各种路径错误和权限问题。直到现在,我还清楚地记得那个深夜——当仿…...
3分钟快速上手:如何用res-downloader高效下载视频号资源
3分钟快速上手:如何用res-downloader高效下载视频号资源 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在当今数…...
MatrixFusion™矩阵视频融合,一路画面管全厂,彻底消除车间监控盲区
MatrixFusion™矩阵视频融合,一路画面管全厂,彻底消除车间监控盲区在智能制造全域可视化管控的落地实践中,工业车间因设备密集、产线交错、通道迂回、多区域分割的固有场景特性,成为监控体系搭建的核心难点。传统工业视频监控系统…...
