1-图像处理基础_哔哩哔哩_bilibili

输出图像像素点需要将图象值要作类型转换,转成Int

图像仿射变换

线性变换+平移

线性变换: 1,变换前直线,变换后仍然直线 2,直线比例不变 3,直线到远点的距离不变

仿射变换计算:

\begin{bmatrix} x'\\ y' \\ 1 \end{bmatrix} =\begin{bmatrix} a_{11} & a_{12} &t_{x} \\ a_{21} & a_{22} &t_{y} \\ 0&0 &1 \end{bmatrix} \begin{bmatrix} x\\y \\ 1 \end{bmatrix}

常见变换:

        恒等变换:变换前后一致

        尺度变换:对尺寸作放大或缩小

        旋转变换:图像旋转但是尺寸不变

        平移::位置移动尺寸不变

        偏移(垂直、水平):垂直或者水平方向变化

代码示例:

import cv2
import numpy as np# 读取图像
img = cv2.imread('image.jpg')# 原图中的三个点
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
# 变换后的三个点
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])# 计算仿射变换矩阵
M = cv2.getAffineTransform(pts1, pts2)# 应用仿射变换
rows, cols, ch = img.shape
dst = cv2.warpAffine(img, M, (cols, rows))# 显示结果
cv2.imshow('Input', img)
cv2.imshow('Affine Transform', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 原图中的三个点
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
# 变换后的三个点
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])# 计算仿射变换矩阵
M = cv2.getAffineTransform(pts1, pts2)

OpenCV 会根据这三个点对(A→A',B→B',C→C')计算出一个仿射变换矩阵,它能把整张图像从原始位置「平移、旋转、缩放、剪切」到目标状态。

仿射变换至少需要三个不共线的点

原因是:

仿射变换的核心是一个 2×3 的矩阵 M,它有 6 个自由度

M=\begin{bmatrix} a_{11}& a_{12} &t_{x} \\ a_{21}& a_{22} &t_{y} \end{bmatrix}

这个矩阵控制了图像的:

  • 缩放

  • 旋转

  • 平移

  • 剪切

3个点为什么足够?

每个点对(原始点 -> 目标点)能提供两个方程(x 和 y 方向),所以:

  • 3个点 × 2 = 6 个方程

  • 恰好解出 6 个未知数:a11,a12,a21,a22,tx,ty

 cv2.warpAffine

dst = cv2.warpAffine(src, M, dsize)

其中:

  • src 是输入图像

  • M 是 2×3 的仿射变换矩阵

  • dsize 是目标图像的大小,格式为 (width, height)

为什么是 (width, height)

这是因为 OpenCV 中:

  • 图像的 .shape 返回的是 (rows, cols, channels),即 (height, width, channels)

  • 但在 cv2.warpAffine() 中,dsize 是图像尺寸,而不是 shape,所以必须按照:dsize=(output_width,output_height)

 

图像内容被映射到原始画布之外

现象:

  • 图像内容扭曲到角落,部分区域成了黑色(像素值为0)

  • 原因是变换后的位置超出了目标图像尺寸

 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用systemd管理GreatSQL服务详解

用systemd管理GreatSQL服务详解 1.GreatSQL服务文件 官网 greatsql.service 文件 [Unit] DescriptionGreatSQL Server Documentationman:mysqld(8) Documentationhttp://dev.mysql.com/doc/refman/en/using-systemd.html Afternetwork.target Aftersyslog.target [Install] …

【AIGC】深度剖析AI伦理:强化隐私防线,推动算法公平性的核心议题

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC 文章目录 🍊1 人工智能兴起背后的伦理及道德风险1.1 算法偏见与歧视1.2 数据隐私侵权1.3 透明度受限1.4 决策失衡1.5 AI生成内容的危险性 🍊2 建构AIGC伦理观:实现人机共创的永…

WebSocket技术全面解析:从历史到实践

WebSocket技术全面解析:从历史到实践 WebSocket作为一种全双工通信协议,彻底改变了Web应用的实时交互模式。它于2011年被IETF正式标准化为RFC 6455,解决了传统HTTP协议在实时通信中的根本缺陷。本文将深入探讨WebSocket的发展历程、技术原理、…

单用户模式、紧急模式、救援模式有什么区别

文章目录 **一、单用户模式(Single User Mode)****功能与用途****启动特点****进入方式** **二、紧急模式(Emergency Mode)****功能与用途****启动特点****进入方式** **三、救援模式(Rescue Mode)****功能…

【大模型入门】访问GPT的API

目录 0 前言 免费访问GPT的API Windows下环境变量的设置 1 非流式输出 1.1 使用requests库 1.2 使用OpenAI库 2 流式输出 2.1 使用requests库 2.2 使用OpenAI库 3 使用OpenAI库与GPT聊天(存储对话历史版) 4 嵌入向量embeddings 4.1 创建嵌入向…

Jenkins 部署脚本

java版 #!/bin/bashAPP_NAME"springboot-demo-0.0.1-SNAPSHOT" JAR_PATH"/home/package/target/${APP_NAME}.jar" LOG_PATH"/home/package/logs/app.log"# 查找并停止旧进程 PID$(ps aux | grep "$APP_NAME.jar" | grep -v grep | awk…

NV183NV185美光固态闪存NV196NV201

美光固态闪存技术深度解析:NV183、NV185、NV196与NV201系列 一、技术架构与核心参数对比 1. 制程工艺与容量布局 美光NV183/NV185/NV196/NV201系列采用176层3D NAND技术,通过垂直堆叠提升存储密度。其中: NV183:主打256GB容量段…

基于单片机PWM控制逆变电源设计资料集:全面掌握逆变电源设计精髓

基于单片机PWM控制逆变电源设计资料集:全面掌握逆变电源设计精髓 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代电子技术中,逆变电源的设计与应用占据了至关重要的位置。今天,我将为您介绍一个优秀的开源项目——基于单片…

Docker Buildx 构建多架构镜像(Redis、Mysql、Java8、Nginx)

目标 ARM64 麒麟电脑无法直接拉取 Redis 镜像,需在 Windows x86 电脑上通过 多架构构建工具(如 Docker Buildx) 生成适配 ARM64 的 Redis 镜像,再打包传输到目标设备。 一、核心问题:跨架构镜像兼容性 直接保存的 redi…

代理IP的安全陷阱:如何避免中间人攻击与IP池污染?

在跨境业务、数据采集等场景中,代理IP已成为刚需工具。然而,其隐藏的安全风险却常被忽视——轻则泄露隐私,重则导致账号封禁、数据劫持甚至金融损失。本文将深入剖析两大核心风险(中间人攻击与IP池污染),并…

深入理解大语言模型中的超参数:Temperature、Top-p 与更多

随着大语言模型(LLM)如 GPT、Claude、Gemini 的广泛应用,调优生成文本的质量与风格成为开发者和研究人员的重要课题。其中,超参数(Hyperparameters)如 temperature 和 top_p 扮演了核心角色,影响…

译码器Multisim电路仿真汇总——硬件工程师笔记

目录 74LS实现二线三线译码器 1 74LS139D和74LS138D基础知识 1.1 74LS139D 二线四线译码器 1.1.1 功能特点 1.1.2 引脚功能 1.1.3 工作原理 1.1.4 应用场景 1.1.5 使用方法 1.1.6 注意事项 1.6.7 逻辑真值表 1.2 74LS138D 3线8线译码器 1.2.1 功能特点 1.2.2 引脚…

国产 OFD 标准公文软件数科 OFD 阅读器:OFD/PDF 双格式支持,公务办公必备

各位办公软件小达人们,今天咱来聊聊数科OFD阅读器! 软件下载地址安装包 这软件啊,是基于咱国家自主OFD标准的版式阅读软件,主要用来阅读和处理OFD/PDF电子文件,还能用于公务应用扩展。它支持打开和浏览OFD/PDF格式的文…

vue中的toRef

在 Vue 中, toRef 函数用于将响应式对象的属性转换为一个独立的 ref 对象,同时保持与原始属性的关联。其参数格式及用法如下: toRef 的参数说明 1. 参数 1:源对象(必须) - 类型: Object &…

暖通锅炉的智能管控:物联网实现节能又舒适​

暖通锅炉系统在建筑供暖、工业供热等领域扮演着重要角色,其运行效率和能源消耗直接关系到用户的使用体验和成本支出。传统的暖通锅炉管理方式往往依赖人工操作和经验判断,存在能耗高、调节不灵活、舒适性差等问题。随着物联网技术的发展,暖通…

PHP:从入门到进阶的全面指南

PHP(Hypertext Preprocessor)作为一种广泛使用的开源脚本语言,尤其适用于 Web 开发并可嵌入 HTML 中。自诞生以来,PHP 凭借其简单易学、功能强大以及丰富的生态系统,成为了众多网站和 Web 应用程序开发的首选语言之一。…

EXCEL 基础函数

1、绝对引用、相对引用 1.1相对引用 相对引用,这是最常见的引用方式。复制单元格公式时,公式随着引用单元格的位置变化而变化 例如在单元格内输入sum(B2:C2),然后下拉填充柄复制公式。 可以看到每个单元格的公式不会保持sum(B2:C2)&#…

升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN

在升级到MySQL 8.4后,许多用户在启动数据库时遇到了一种常见错误:“io_setup() failed with EAGAIN”。本文将深入探讨该错误的原因,并提供详细的解决方案。错误分析错误描述当你启动MySQL时,可能会在日志文件中看到以下错误信息&…

【ECharts Y 轴标签优化实战:从密集到稀疏的美观之路】

ECharts Y 轴标签优化实战:从密集到稀疏的美观之路 📋 文章背景 在开发数据可视化模块时,我们遇到了一个常见但棘手的图表显示问题:ECharts 图表的 Y 轴标签过于密集,影响了用户体验和数据的可读性。本文将详细记录整个…

【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Pytorch完整源码和数据)

目录 效果一览程序获取程序内容代码分享效果一览 程序获取 获取方式一:文章顶部资源处直接下载:【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Pytorch完整源码和数据) 获取方式二:订阅电池建模专栏获取电池系列更多文件。 程序内容 1.【锂电池剩余寿命预测…