图像预处理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/7/29 10:53:48 阅读更多 →
从肌电控制到3D打印:创客自制功能性假手的技术实现与避坑指南

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

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

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

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

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

2026/7/29 10:52:48 阅读更多 →

最新新闻

计算机毕业设计之基于springboot的宠物智能健康管理系统

计算机毕业设计之基于springboot的宠物智能健康管理系统

随着宠物饲养的普及和宠物主人对宠物健康日益增长的关注,一个功能全面、操作便捷、智能化的宠物健康管理系统显得尤为重要。本系统采用Spring Boot作为后端框架,结合Java语言进行开发,利用MySQL数据库进行数据存储与管理。前端则采用Vue.js框…

2026/7/29 10:59:49 阅读更多 →
Topit:Mac用户的终极窗口管理神器,免费解决窗口遮挡难题

Topit:Mac用户的终极窗口管理神器,免费解决窗口遮挡难题

Topit:Mac用户的终极窗口管理神器,免费解决窗口遮挡难题 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 还在为Mac上多个窗口互相遮挡而…

2026/7/29 10:59:49 阅读更多 →
终极指南:3步解锁老款Mac,免费升级最新macOS系统

终极指南:3步解锁老款Mac,免费升级最新macOS系统

终极指南:3步解锁老款Mac,免费升级最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在使用2015年前的MacBook Pr…

2026/7/29 10:59:49 阅读更多 →
SAP IAM核心概念与权限管理实战指南

SAP IAM核心概念与权限管理实战指南

1. SAP身份与访问管理基础概念解析在SAP系统中,身份与访问管理(Identity and Access Management,简称IAM)是企业信息安全的第一道防线。作为从业15年的SAP顾问,我见过太多因为权限管理不当导致的数据泄露和业务混乱案例…

2026/7/29 10:59:49 阅读更多 →
MetaboAnalystR 4.0:如何用开源R包实现LC-MS代谢组学一站式分析

MetaboAnalystR 4.0:如何用开源R包实现LC-MS代谢组学一站式分析

MetaboAnalystR 4.0:如何用开源R包实现LC-MS代谢组学一站式分析 【免费下载链接】MetaboAnalystR R package for MetaboAnalyst 项目地址: https://gitcode.com/gh_mirrors/me/MetaboAnalystR 你是否曾为处理复杂的LC-MS代谢组学数据而烦恼?面对海…

2026/7/29 10:59:49 阅读更多 →
数据分析实战指南:从工具到业务落地的完整闭环

数据分析实战指南:从工具到业务落地的完整闭环

1. 数据分析速成指南:从零到入门的实战路径刚入行数据分析那会儿,我花了三个月才搞明白那些培训机构两小时就能讲完的知识框架。不是老师教得不好,而是市面上大多数课程都忽略了数据分析最关键的实战衔接环节——如何把分散的知识点串联成可落…

2026/7/29 10:58:49 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻