python学opencv|读取图像(三十)使用cv2.getAffineTransform()函数倾斜拉伸图像
【1】引言
前序已经学习了如何平移和旋转缩放图像,相关文章链接为:
python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像-CSDN博客
python学opencv|读取图像(二十八)使用cv2.getRotationMatrix2D()函数旋转缩放图像-CSDN博客
在此基础上,我们尝试倾斜拉伸图
【2】核心代码
前序学习进程中,已经知晓平移图像的核心代码是设置M矩阵,使其按照两行三列的形式,通过改变第三列的值来移动图像:
此时的M矩阵有两个可选变量x和y:
M=[[1,0,x],
[0,1,y]],
当x>0,图像向右移动x大小的位置;当y>0,图像向右下移动y大小的位置;当x和y取负值时图像分别向左和向上运动。
当我们想旋转图像时,需要调用一个cv2.getRotationMatrix2D()函数来实现旋转,通过定义旋转中心,旋转角度和缩放倍数实现旋转和缩放目标。
Mat cv::getRotationMatrix2D ( Point2f center, #旋转中心,需要提前定义好
double angle, #旋转角度
double scale ) #缩放倍数
而当我们想倾斜拉伸图像时,是根据图像的坐标点来操作的:
输入图像有四个顶角;
取三个顶角的点坐标即可知晓图像大小;
给出新的三个坐标点,替换之前取到的三个坐标点,即可倾斜拉伸图像。
具体调用的函数为:cv2.getAffineTransform(p1,p2)。
点击下述链接,直达函数官网教程:
OpenCV: Geometric Image Transformations
在这里会看到对函数的详细介绍,非常简单,函数里练得输入是两个集合,每个集合由三个坐标点组成。
【3】代码测试
首先是引入模块和完成初始图像的读取:
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
src = cv.imread('srcm.png')
然后先读取原图想的三个点:
#设置点
rows=len(src) #读取图像行数
cols=len(src[0]) #读取图像列数
p1=np.zeros((3,2),np.float32) #32位浮点型全0矩阵
p1[0]=[0,0] #第一点
p1[1]=[cols-1,0] #第二点
p1[2]=[0,rows-1] #第三点
再设置新的三个点:
p2=np.zeros((3,2),np.float32) #32位浮点型全0矩阵
p2[0]=[100,0] #新的第一点
p2[1]=[cols-1,0] #新的第二点
p2[2]=[0,rows-1] #新的第三点
之后通过调用cv2.getAffineTransform(p1,p2)函数,用p2的三个点坐标替换p1的三个点坐标,由此实现图像的倾斜拉伸:
cv.getAffineTransform(p1,p2)
最后回到cv2.warpAffine()函数实现图像的输出、显示和保存:
dst=cv.warpAffine(src,M,(cols,rows)) #输出图像
cv.imshow('srcm-qxls', dst) # 在屏幕展示绘制圆形的效果
cv.imwrite('srcm-qxls.png', dst) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
使用的初始图像为:srcm.png

图1 srcm.png
代码运行后的输出图像为:

图2 srcm-qxls.png
【4】细节说明
这里给出的两组点,其实p1[1]=p2[1],p1[2]=p2[2];发生变化的是p1[0]到p2[0]:也就是把左上角的顶点往右移动100个像素位置,此时图像会自动保持侧面的边线平行,让右下角的点左移100个像素点。这就是图2所示的模样。
p1=np.zeros((3,2),np.float32) #32位浮点型全0矩阵 p1[0]=[0,0] #第一点 p1[1]=[cols-1,0] #第二点 p1[2]=[0,rows-1] #第三点p2=np.zeros((3,2),np.float32) #32位浮点型全0矩阵 p2[0]=[100,0] #新的第一点 p2[1]=[cols-1,0] #新的第二点 p2[2]=[0,rows-1] #新的第三点
【5】总结
掌握了python+opencv实现图像倾斜拉伸的技巧。
相关文章:
python学opencv|读取图像(三十)使用cv2.getAffineTransform()函数倾斜拉伸图像
【1】引言 前序已经学习了如何平移和旋转缩放图像,相关文章链接为: python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像-CSDN博客 python学opencv|读取图像(二十八࿰…...
Unity3D中基于ILRuntime的组件化开发详解
前言 在Unity3D开发中,组件化开发是一种高效且灵活的软件架构方式。通过将游戏功能拆分为独立的、可重用的组件,开发者可以更容易地管理、扩展和维护代码。而ILRuntime作为一款基于C#的热更新框架,为Unity3D开发者提供了一种高效的热更新和组…...
ELK的搭建
ELK elk:elasticsearch logstatsh kibana统一日志收集系统 elasticsearch:分布式的全文索引引擎点非关系型数据库,存储所有的日志信息,主和从,最少需要2台 logstatsh:动态的从各种指定的数据源,获取数据…...
国产信创实践(国能磐石服务器操作系统CEOS +东方通TongHttpServer)
替换介绍: 国能磐石服务器操作系统CEOS 对标 Linux 服务器操作系统(Ubuntu, CentOS) 东方通TongHttpServer 对标 Nginx 负载均衡Web服务器 第一步: 服务器安装CEOS映像文件,可直接安装,本文采用使用VMware …...
C#里使用libxl读取EXCEL文件里的图片并保存出来
有时候需要读取EXCEL里的图片文件, 因为很多用户喜欢使用图片保存在EXCEL里,比如用户保存一些现场整改的图片。 如果需要把这些图片抽取出来,再保存到系统里,就需要读取这些图片数据,生成合适的文件再保存。 在libxl里也提供了这样的方法, 如下: var picType = boo…...
【开源免费】基于SpringBoot+Vue.JS企业级工位管理系统(JAVA毕业设计)
本文项目编号 T 127 ,文末自助获取源码 \color{red}{T127,文末自助获取源码} T127,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
美国大学的计算机科学专业排名
美国的计算机科学专业在全球范围内享有盛誉,许多大学在该领域具有卓越的教学和研究实力。以下是根据最新的排名和信息整理的美国计算机科学专业顶尖大学列表: 2025年 U.S. News 美国本科计算机科学专业排名: 斯坦福大学(Stanfor…...
机器学习实战——决策树:从原理到应用的深度解析
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 决策树(Decision Tree)是一种简单而直观的分类与回归模型,在机器学习中广泛应用。它的…...
开源生成式物理引擎Genesis,可模拟世界万物
这是生成大模型时代 —— 它们能生成文本、图像、音频、视频、3D 对象…… 而如果将所有这些组合到一起,我们可能会得到一个世界! 现在,不管是 LeCun 正在探索的世界模型,还是李飞飞想要攻克的空间智能,又或是其他研究…...
kubernetes第七天
1.影响pod调度的因素 nodeName 节点名 resources 资源限制 hostNetwork 宿主机网络 污点 污点容忍 Pod亲和性 Pod反亲和性 节点亲和性 2.污点 通常是作用于worker节点上,其可以影响pod的调度 语法:key[value]:effect effect:[ɪˈfek…...
RK3588上CPU和GPU算力以及opencv resize的性能对比测试
RK3588上CPU和GPU算力以及opencv resize的性能对比测试 一.背景二.小结三.相关链接四.操作步骤1.环境搭建A.安装依赖B.设置GPU为高性能模式C.获取GPU信息D.获取CPU信息 2.调用OpenCL SDK获取GPU信息3.使用OpenCL API计算矩阵乘4.使用clpeak测试GPU的性能5.使用OpenBLAS测试CPU的…...
基于Centos 7系统的安全加固方案
创作不易,麻烦点个免费的赞和关注吧! 声明! 免责声明:本教程作者及相关参与人员对于任何直接或间接使用本教程内容而导致的任何形式的损失或损害,包括但不限于数据丢失、系统损坏、个人隐私泄露或经济损失等…...
IT行业的发展趋势
一、引言 IT(信息技术)行业自诞生以来,就以惊人的速度发展,不断改变着我们的生活、工作和社会结构。如今,随着技术的持续创新、市场需求的演变以及全球经济格局的变化,IT行业正迈向新的发展阶段࿰…...
《探秘开源多模态神经网络模型:AI 新时代的万能钥匙》
《探秘开源多模态神经网络模型:AI 新时代的万能钥匙》 一、多模态模型的崛起之路(一)从单一到多元:模态的融合演进(二)关键技术突破:解锁多模态潜能 二、开源多模态模型深度剖析(一&…...
ROS核心概念解析:从Node到Master,再到roslaunch的全面指南
Node 在ROS中,最小的进程单元就是节点(node)。一个软件包里可以有多个可执行文件,可执行文件在运行之后就成了一个进程(process),这个进程在ROS中就叫做节点。 从程序角度来说,node就是一个可执行文件&…...
2025广州国际汽车内外饰技术展览会:引领汽车内外饰发展新潮流-Automotive Interiors
随着科技的不断进步和消费者对汽车品质的要求日益提高,汽车内外饰的设计和制造也在不断创新和发展。AUTO TECH China 2025广州国际汽车内外饰技术展览会作为行业内的重要盛会,将于2025年11月20日至22日在广州保利世贸博览馆盛大举办。本次展览会将汇集全…...
ElasticSearch内存占用率过高怎么办?
文章目录 1,先用top看看各个进程的内存占用情况2,不能简单的杀死进程,然后再重启。3,查看一下ElasticSearch进程的具体启动情况4,修改Elasticsearch 的Java堆内存 1,先用top看看各个进程的内存占用情况 先…...
基于Qt的OFD阅读器开发原理与实践
摘要 本文详细探讨了基于Qt开发OFD阅读器的原理与实践。通过解析OFD文件格式、构建文档结构、实现页面渲染、处理用户交互以及进行性能优化,本文展示了如何使用Qt框架开发一个功能强大、性能优异的OFD阅读器。文章还提供了示例代码和未来发展方向,为开发…...
用 HTML5 Canvas 和 JavaScript 实现流星雨特效
最近在研究前端动画效果时,实现了一个超酷的流星雨特效,今天来和大家分享下具体实现过程。 1,整体实现思路 这个流星雨特效主要由 HTML、CSS 和 JavaScript 协同完成。HTML 搭建基础结构,CSS 负责页面样式设计,JavaScript 实现星星和流星的动态效果。 效果展示: 用 HTM…...
Apifox=Postman+Swagger+Jmeter+Mock
A. 开发人员接口管理使用(Swagger 工具管理接口) B. 后端开发人员通过Postman 工具,一边开发一边测试 C. 前端开发人员需要Mock 工具提供前端调用 D. 测试人员通过(Postman、Jmeter)等工具进行接口测试 为了后台开发、前端开发、测试工程师等不同角色更加便捷管理…...
UE5 BaseEditorSettings.ini加载原理与配置生效机制
1. 为什么你改了BaseEditorSettings.ini却没生效?——从UE5编辑器启动流程讲起很多人在UE5项目里折腾半天,把BaseEditorSettings.ini文件翻来覆去改了十几遍,重启编辑器后发现:缩放比例还是不对、网格间距没变、甚至“启用实时预览…...
从USB转TTL接线到手机热点配网:ESP8266无线通信保姆级避坑指南(附软件包)
从USB转TTL接线到手机热点配网:ESP8266无线通信保姆级避坑指南 当你第一次拿起ESP8266模块时,可能会被这个小巧的Wi-Fi模块惊艳到——它只有指甲盖大小,却蕴含着强大的无线通信能力。但很快,这种惊艳就会变成困惑:为什…...
强化学习在并行机构人形机器人控制中的应用
1. 项目概述在机器人控制领域,强化学习(RL)正逐渐成为解决复杂动力学系统问题的有力工具。然而,当面对具有并行驱动机构的人形机器人时,传统RL训练方法往往面临一个关键挑战:大多数仿真环境无法准确模拟闭环运动链(Closed Kinemat…...
C++中显示与隐式加载dll的使用与区别
一、什么是 DLL?DLL(Dynamic Link Library) 是 Windows 下的动态链接库,包含可被多个程序共享的函数、资源或类。使用 DLL 可以实现代码复用、模块化设计和插件机制。在 C 中,调用 DLL 中的函数有两种主要方式…...
如何删除论文脚注横线的方法——视图-草稿-引用——显示备注——删除脚注分隔符-即可。
如何删除论文脚注横线的方法——视图-草稿-引用——显示备注——删除脚注分隔符-即可。 Word中脚注线不会删?这里有妙招!,教育,职业教育,好看视频...
高性能Windows流媒体服务器部署:5大核心技术与3种实战架构深度解析
高性能Windows流媒体服务器部署:5大核心技术与3种实战架构深度解析 【免费下载链接】srs-windows 项目地址: https://gitcode.com/gh_mirrors/sr/srs-windows 在Windows平台上构建专业级流媒体服务系统,需要综合考虑协议兼容性、性能优化和部署架…...
对称与负电源测试:动态直流电子负载的设计、原理与应用
1. 项目概述:对称与负电源的静态与动态直流负载在电子实验室里,测试一个电源的性能,尤其是它的动态响应能力,是件既基础又关键的事。我们常说的“直流电子负载”就是这个领域的核心工具。我之前设计并分享过一个用于正电源测试的静…...
销售怎么通过各种方法获取电话号码
第一种就是那个用爬虫电话号码,然后再打电话给客户。第二种是在别人的挪车电话看车挪车电话,然后再打电话找客户。第三就是。扫楼一顿顿的扫,第四就是这个那种商店,一个个的去问陌拜地推一个个的问店子要不要贷款,去问…...
3步解锁专业级MMD创作:Blender插件如何重塑二次元动画工作流
3步解锁专业级MMD创作:Blender插件如何重塑二次元动画工作流 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …...
MAX78000移植Zephyr RTOS实战:从BSP创建到AI边缘设备开发
1. 项目概述与动机作为一名长期在嵌入式边缘AI和机器人领域摸爬滚打的开发者,我最近把目光投向了一块相当有潜力的板子:Maxim Integrated(现为ADI一部分)的MAX78000FTHR开发套件。这块板子的核心——MAX78000微控制器,…...
