图像预处理2-几何变换
几何变换包括了图像的平移、缩放、旋转、中心裁剪、透视变换opencv 传统计算机视觉图像处理库进行图像的几何变换也有TensorFlow库专门给张量(Tensor)进行的图像几何变换PyTorch可以进行PIL图像以及Tensor张量的处理注意TensorFlow和PyTorch都是在线增强此次应用到的都是opencv库1、 图像平移将图像中所有的点按照指定的平移量水平或者垂直移动 属于仿射变换dst cv2.warpAffine(src, M, dsize, flags, borderMode, borderValue)1、 src 输入原图可以是灰度图也可以是彩色图反正opencv读取的是numpy数组2、M指的是一个2X3 的浮点变换矩阵 必须置顶dtypenp.float32否则报错示例向右平移50个像素向下平移30个像素 【不懂可见平移变换的原理】import numpy as np M np.array([ [1, 0, 50], [0, 1, 30] ], dtypenp.float32)3、dsize输出图像尺寸 宽高 一般写成dsizewh4、flags插值方式默认不用改图像像素填充算法平移几乎都用默认cv2.INTER_LINEAR双线性插值默认二值掩码图可用cv2.INTER_NEAREST5、borderMode 边界填充模式默认cv2.BORDER_CONSTANT纯色填充空白区域 一般不修改。6、borderValue平移后空白区域填充颜色灰度图borderValue0黑色默认BGR 彩色图borderValue(255,255,255)白色平移变换的原理原来的像素的位置坐标为x0,y0经过平移量△x△y后坐标变为x1,y1如下所示1、用数学式子表示可以表示为x1 x0 △x,y1 y0 △y2、用矩阵表示为代码演示import cv2 import numpy as np img cv2.imread(test.jpg) h, w img.shape[:2] tx -40 # 左移40 ty -20 # 上移20 M np.float32([[1, 0, tx], [0, 1, ty]]) # 空白区域填充白色 shift_img cv2.warpAffine( img, M, dsize(w, h), borderValue(255, 255, 255) ) cv2.imshow(img, img) cv2.imshow(shift, shift_img) cv2.waitKey(0) cv2.destroyAllWindows()结果呈现2、图像缩放缩小图像称为下采样subsampled或降采样(downsampled)放大图像称为上采样upsampled主要目的是得到更高分辨率的图像cv2.resize(src, dsize, dstNone, fxNone, fyNone, interpolationNone)参数说明1、src输入图片2、dsize目标输出的尺寸 如第一个图像平移所示3、dst输出图像基本不用直接res_imgcv2.resize(...)4、fx:【X 轴水平方向缩放比例】fx 1宽度不变fx 1宽度放大上采样fx 1宽度缩小下采样fx0代表以 dsize 尺寸为准比例失效示例宽度变为原图 0.6 倍 →fx0.65、fy: 【Y 轴垂直方向缩放比例】和 fx 逻辑完全一致控制高度 fy0.8 → 高度缩为原图 80%fx、fy 使用硬性前提: 必须让 dsize None否则 fx/fy 不会生效。6、interpolation :【插值算法缩放画质算法】插值常量适用场景特点cv2.INTER_LINEAR默认放大图片双线性插值平滑自然默认首选cv2.INTER_AREA缩小图片预处理必用区域重采样抗锯齿、防模糊、无波纹cv2.INTER_NEAREST二值掩码、分割图最近邻插值速度最快会有马赛克cv2.INTER_CUBIC大幅度高清放大三次卷积画质最好速度最慢下采样缩小统一尺寸interpolationcv2.INTER_AREA上采样放大默认interpolationcv2.INTER_LINEA缩放的原理水平缩放系数为sx垂直缩放系数为sy(x0,y0)为缩放前坐标(x,y)为缩放后坐标其缩放的坐标映射关系矩阵表示的形式为演示代码import cv2 import numpy as np img cv2.imread(test.jpg) if img is None: raise FileNotFoundError(图片不存在) # 放大1.8倍放大用默认双线性插值 resize_big cv2.resize( img, dsizeNone, fx1.8, fy1.8, interpolationcv2.INTER_LINEAR ) cv2.imshow(img, img) cv2.imshow(enlarge, resize_big) cv2.waitKey(0) cv2.destroyAllWindows()结果呈现3、 裁剪中心裁剪 tensorflow内置API 适合训练Pipelinecropped tf.image.central_crop(image, central_fraction0.5)OpenCV-Python无原生接口通过图像数组切片手动计算坐标实现等价中心裁剪适合本地离线批量预处理。4、 图像旋转以图像的中心为原点旋转一定的角度也就是将图像上的所有像素都旋转一个相同的角度。retval cv2.getRotationMatrix2D(center, angle, scale) #第一步获取旋转矩阵 rotate_img cv2.warpAffine(img, M, (w, h)) #第二步执行仿射变换完成旋转参数拆解1、center旋转中心点一般填图片中心(w/2, h/2)2、angle旋转角度正数逆时针旋转负数顺时针旋转3、scale旋转同时附带缩放系数1 不缩放注意旋转后的图像大小一般会发生改变因为转出显示区域的图像会被截去或者扩大图像范围来显示图像的所有部分示例代码import cv2 img cv2.imread(test.jpg) h, w img.shape[:2] # 1. 获取旋转矩阵中心、逆时针30度、不缩放 M cv2.getRotationMatrix2D((w/2, h/2), 30, 1) # 2. 执行旋转 rotate_img cv2.warpAffine(img, M, (w, h)) cv2.imshow(img, img) cv2.imshow(rotate, rotate_img) cv2.waitKey(0)结果呈现5、 透视变换透视变换本质是将图像投影到一个新的视平面M cv2.getPerspectiveTransform(src, dst) #1 计算透视变换矩阵 result cv2.warpPerspective(src, M, dsize) #2 应用透视矩阵完成变换1.cv2.getPerspectiveTransform(src, dst)src原图上4 个不规则四边形顶点必须 float32 数组顺序严格左上→右上→右下→左下dst想要变成的标准矩形 4 个顶点一般就是[[0,0],[w,0],[w,h],[0,h]]返回值3×3 透视变换矩阵 M2.cv2.warpPerspective(src, M, dsize)src原始图像M上面求出的透视矩阵dsize输出图片尺寸(宽度,高度)可选参数borderValue(255,255,255)空白区域填充白色示例代码import cv2 import numpy as np def perspective_correct(img, src_points, target_w, target_h): 透视变换矫正图片 :param img: cv2读取原图 :param src_points: 原图四个角点顺序左上、右上、右下、左下 :param target_w: 矫正后图片宽度 :param target_h: 矫正后图片高度 :return: 矫正完成图像 # 目标规整矩形四个点标准矩形 dst_points np.array([ [0, 0], [target_w, 0], [target_w, target_h], [0, target_h] ], dtypenp.float32) # 1. 计算透视变换矩阵 M cv2.getPerspectiveTransform(src_points, dst_points) # 2. 执行透视变换 result cv2.warpPerspective(img, M, (target_w, target_h)) return result if __name__ __main__: img cv2.imread(test.jpg) h, w img.shape[:2] src np.array([ [120, 80], # 左上角 [680, 60], # 右上角 [710, 520], # 右下角 [90, 490] # 左下角 ], dtypenp.float32) # 设置矫正后输出图片大小 out_width 600 out_height 400 # 透视矫正 warp_img perspective_correct(img, src, out_width, out_height) # 显示原图与矫正结果 cv2.imshow(img, img) cv2.imshow(perspective corrected, warp_img) cv2.waitKey(0) cv2.destroyAllWindows() # 保存矫正后的图片 cv2.imwrite(corrected_result.jpg, warp_img)结果呈现

相关新闻

智能音频硬件技术突破:动态声学指纹与混合精度推理

智能音频硬件技术突破:动态声学指纹与混合精度推理

1. 智能音频硬件的技术拐点 2026年可能成为消费级智能硬件的分水岭——OpenAI最新路线图显示,其下一代音频模型将突破现有语音交互的三大瓶颈:在嘈杂环境下的98%识别准确率(当前行业平均为85%)、200ms级端到端响应延迟&#xff08…

2026/10/8 18:39:28 阅读更多 →
从肌电控制到3D打印:创客自制功能性假手的技术实现与避坑指南

从肌电控制到3D打印:创客自制功能性假手的技术实现与避坑指南

1. 项目概述:当创客精神与生命需求相遇“身残志坚”这个词,我们听过很多次,但当一个真实的创客,面对自己因故截肢的现实,选择不再等待,而是亲手用3D打印和开源硬件为自己打造一只功能性的电动假手时&#x…

2026/10/4 7:21:19 阅读更多 →
【爱马仕】Hermes 智能应用本地部署思路,整合包缩短调试与安装耗时(含安装包)

【爱马仕】Hermes 智能应用本地部署思路,整合包缩短调试与安装耗时(含安装包)

Hermes Windows 整合包落地教程,轻松搭建本地桌面智能 Agent 内容要点 整合全部运行依赖组件、省去手动环境调试、全程图形化引导、支持本地自动化任务处理 安装包下载地址:https://hm.ikidi.top/api/download/package/55?promoCodeIV644F14DA00 前…

2026/10/7 20:10:32 阅读更多 →

最新新闻

微电网仿真必看:三机并联风光储系统Simulink建模全流程

微电网仿真必看:三机并联风光储系统Simulink建模全流程

做微电网仿真课题的人,十个里有八个会卡在“风光储怎么并联”这一步。我拿到“三机并联风光混合储能并网系统”这个题目时,起初也以为就是把光伏、风机、储能各搭一个模型,往交流母线上一怼就行。真跑到波形收敛那一关才发现,三台…

2026/10/10 22:19:07 阅读更多 →
Python验证码识别最小可行系统:本地可复现的CNN训练推理闭环

Python验证码识别最小可行系统:本地可复现的CNN训练推理闭环

简介:本资源是一套基于Python与TensorFlow实现的验证码图像识别完整训练与调用方案,面向具备基础Python编程能力及机器学习入门知识的开发者,解决实际业务中常见的简单验证码自动识别需求。压缩包共2000个文件,主体为1457张标注用…

2026/10/10 22:19:07 阅读更多 →
红外动物检测实战:YOLOv8适配9568张热成像图像

红外动物检测实战:YOLOv8适配9568张热成像图像

简介:本资源是面向计算机视觉开发者与深度学习初学者的红外场景动物目标检测专用数据集,专为YOLO系列算法(v5/v7/v8/v9/v10/v11)训练与验证优化设计,解决野外红外图像中郊狼、鹿、猪、兔、浣熊等常见野生动物识别难、标…

2026/10/10 22:19:07 阅读更多 →
YOLOv7肉鸡健康检测:数据集与训练推理全流程指南

YOLOv7肉鸡健康检测:数据集与训练推理全流程指南

简介:YOLOv7养殖场肉鸡健康状态检测权重数据集是一套面向家禽养殖场景的目标检测资源,适合学习YOLO系列算法落地应用的开发者或农业智能化研究人员。资源以肉鸡健康状态(Abnormal/Normal)为二分类检测目标,提供可直接使…

2026/10/10 22:19:07 阅读更多 →
Teanary V1.2.1发布:基于FilamentPHP的收官版本与迁移反思

Teanary V1.2.1发布:基于FilamentPHP的收官版本与迁移反思

最近把 Teanary 的 V1.2.1 版本正式推送出去了,这个版本对我来说多少有点特殊,因为它是 Teanary 最后一个基于 FilamentPHP 的稳定版本。以后 Teanary 的迭代方向会有变化,所以这一版既是给老用户的一个交代,也算是我自己在这条技…

2026/10/10 22:19:07 阅读更多 →
Java八种基本类型详解:从int到boolean,内存、范围与转换一次说透

Java八种基本类型详解:从int到boolean,内存、范围与转换一次说透

前两天看到一个挺有意思的说法,有人把 Java 的 int 关键字念成“英特”,还写成了“函数英特12”。乍一看像是网络流行梗,但细想之下还挺有代表性——这是典型的把“类型声明”当成“函数调用”的理解偏差。既然聊到这儿,干脆把 Ja…

2026/10/10 22:18:06 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →