數字圖像處理學習筆記

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.【鋰電池剩余壽命預測…