OpenCV 圖像仿射變換之旋轉

一、知識點
1、void warpAffine(InputArray src,?
? ? ? ? ? ? ? ? ? OutputArray dst,?
?? ??? ??? ??? ? ?InputArray M,?
?? ??? ??? ??? ? ?Size dsize,?
?? ??? ??? ??? ? ?int flags = INTER_LINEAR,?
?? ??? ??? ??? ? ?int borderMode = BORDER_CONSTANT,?
?? ??? ??? ??? ? ?const Scalar & borderValue = Scalar());

(1)、對圖像應用仿射變換(旋轉、平移、縮放)。
(2)、參數說明:
? ? src: 輸入圖像。
? ? dst: 輸出圖像,大小為dsize,數據類型與src相同。
?? ?M: 2 * 3轉換矩陣(兩行三列)。
?? ?dsize: 輸出圖像的大小。
?? ?flags: 插值方法,InterpolationFlags枚舉值。可和WARP_INVERSE_MAP組合,意味著M是逆變換(dst-->src)。
?? ?borderMode: 邊界模式,像素外推方法,BorderTypes枚舉值。
?? ?borderValue: 邊界值。 當borderMode為BORDER_CONSTANT時,borderValue為邊界的像素顏色。
(3)、仿射變換公式:

dst(x,y) = src(M11x + M12y + M13, M21x + M22y + M23)| M11 M12 M13 | ? ? | x || ? ? ? ? ? ? | ?* ?| y || M21 M22 M23 | ? ? | 1 |


2、在OpenCV中,旋轉矩陣M為:

    | cosθ ? sinθ ? 0 || ? ? ? ? ? ? ? ? || -sinθ ?cosθ ? 0 |


3、在OpenCV中,平移矩陣M為:

    | 1 ? 0 ? dx || ? ? ? ? ? ?|| 0 ? 1 ? dy |


4、但是2、3的矩陣只相對于原點變換,實際工作中,經常是2、3的結合。?
? 對于繞任意點的旋轉矩陣,OpenCV中提供getRotationMatrix2D()獲取。

5、Mat getRotationMatrix2D(Point2f center, double angle, double scale);
? (1)、計算2D旋轉的仿射矩陣,可以用來對圖像進行旋轉。
? (2)、參數說明:
? ? ? center: 源圖像的旋轉中心點,即源圖像要圍繞此點旋轉。
?? ? ?angle: 旋轉的角度,以度為單位,正值逆時針旋轉,負值順時針旋轉。
?? ? ?scale: 縮放因子。 1.0不改變大小,0.5縮小一半,2.0放大一倍。
? (3)、原點在源圖像的左上角。
?? ?
6、旋轉后新的圖像大小計算:

? nw = w * cosθ + h * sinθ;nh = h * cosθ + w * sinθ;

二、示例代碼

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{//1.獲取源圖像cv::Mat src = cv::imread("../images/9.png");if (src.empty()){std::cout << "load src image error..." << std::endl;return -1;}cv::imshow("源圖像", src);//2.獲取源圖像寬、高int w = src.cols;int h = src.rows;//3.獲取圍繞源圖像中心點,逆時針旋轉45度,不縮放的矩陣cv::Mat M = cv::getRotationMatrix2D(cv::Point2f(w / 2, h / 2), 45, 1.0);//4.仿射變換,但是旋轉后圖像四角被截斷,并且有黑色背景cv::Mat dst1;cv::warpAffine(src, dst1, M, cv::Size(w, h));cv::imshow("繞中心點逆時針旋轉45度", dst1);//5.改變旋轉后圖像大小,源圖像四角不被截斷double cosTheta = cv::abs(M.at<double>(0, 0));double sinTheta = cv::abs(M.at<double>(0, 1));int nw = w * cosTheta + h * sinTheta;int nh = h * cosTheta + w * sinTheta;M.at<double>(0, 2) += (nw / 2.0 - w / 2.0);M.at<double>(1, 2) += (nh / 2.0 - h / 2.0);cv::Mat dst2;cv::warpAffine(src, dst2, M, cv::Size(nw, nh));cv::imshow("改變大小,源圖像四角不被截斷", dst2);//6.填充背景cv::Scalar backColor(src.at<cv::Vec3b>(0, 0)[0], src.at<cv::Vec3b>(0, 0)[1], src.at<cv::Vec3b>(0, 0)[2]);cv::Mat dst3;cv::warpAffine(src, dst3, M, cv::Size(nw, nh), cv::INTER_LINEAR, 0, backColor);cv::imshow("填充背景", dst3);cv::waitKey(0);return 0;
}

輸出結果:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84425.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HCIP-數據通信基礎

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 本篇筆記是根據B站上的視頻教程整理而成&#xff0c;感謝UP主的精彩講解&#xff01;如果需要了解更多細節&#xff0c;可以參考以下視頻&#xff1a;…

C語言基本數據類型與變量詳解

# C語言基本數據類型與變量詳解 ## 數據類型概述 在C語言中&#xff0c;數據類型決定了變量在內存中的存儲方式和大小&#xff0c;以及可以對其執行的操作。合理選擇數據類型能夠提高程序的效率和準確性&#xff0c;避免內存浪費和數據溢出等問題。 C語言的基本數據類型主要包括…

Babylon.js學習之路《十、高級幾何體:自定義模型與復雜形狀生成》

文章目錄 1. 引言&#xff1a;高級幾何體的應用場景2. 參數化建模&#xff1a;Babylon.MeshBuilder2.1 擴展幾何體類型2.2 自定義多邊形&#xff08;ExtrudePolygon&#xff09; 3. 頂點級建模&#xff1a;自定義VertexData3.1 手動定義頂點數據3.2 動態生成地形&#xff08;高…

【趙渝強老師】Kubernetes的安全框架

Kubernetes集群的安全框架主要由以下認證、鑒權和準入控制三個階段組成。這三個階段的關系如下圖所示。 視頻講解如下 【趙渝強老師】Kubernetes的安全框架 認證&#xff08;Authentication&#xff09; 當客戶端與Kubernetes集群建立HTTP通信時&#xff0c;首先HTTP請求會進…

CDN與靜態資源優化

CDN與靜態資源優化 在現代Web系統和AI應用中&#xff0c;隨著用戶訪問量的不斷攀升&#xff0c;靜態資源&#xff08;如HTML、CSS、JavaScript、圖片、音視頻、模型文件等&#xff09;帶來的負載日益沉重。尤其在大模型推理、前端渲染、廣告投放等場景中&#xff0c;靜態資源的…

如何填寫“appium inspector”內容?

1. 確認已經開啟appium的服務&#xff0c;運行appium 參考內容&#xff1a;{"appium:platformName": "Android", # 系統名稱"appium:platformVersion": "9", # 安卓版本&#xff0c;看設備"appium:deviceName": "3d…

mysql server層做了什么

服務器處理客戶端請求 服務器程序在處理來自客戶端的查詢請求時&#xff0c;大致需要分為3部分&#xff1a;連接管理、解析與優化、存儲引擎。 連接管理 每當有一個客戶端進程連接到服務器進程時&#xff0c;服務器進程都會創建一個線程專門處理與這個客戶端的交互&#xff…

APISIX 簡介:云原生 API 網關的架構與實踐

文章目錄 引言&#xff1a;APISIX 概述基于Nginx構建的原因基于etcd構建的原因 架構圖示架構分層解析管理層&#xff1a;人機交互與配置入口控制層&#xff1a;配置管理與集群協調數據面&#xff1a;請求處理與流量轉發說明&#xff1a;關于OpenRestry 引言&#xff1a;APISIX …

【AI作畫】第3章 LORA加載器

目錄 LORA加載器 管道信息 ?編輯 ?編輯 ?編輯 lora模型的串接 作品集 LORA加載器 前面我們已經分析過節點目錄了&#xff0c;現在我們來看一下LORA加載器。我們進行圖片渲染&#xff0c;一般都需要LORA模型的。 首先&#xff0c;我們“鼠標右鍵——添加節點——…

Xilinx XC7A12T?1CPG238I Artix?7 FPGA

XC7A12T?1CPG238I 以其獨特的性能與封裝組合&#xff0c;成為諸多工程師的首選方案。下面&#xff0c;我們從多個維度對這款芯片做深入剖析。 一、產品定位與封裝特點 XC7A12T?1CPG238I 屬于賽靈思&#xff08;Xilinx&#xff09;28?nm Artix?7 系列中的入門級型號&#x…

如何利用 Java 爬蟲獲得微店商品詳情:實戰指南

在電商領域&#xff0c;微店作為眾多商家的線上銷售渠道之一&#xff0c;其商品詳情數據對于市場分析、競品研究和商業決策具有重要價值。Java 爬蟲技術可以幫助我們高效地獲取這些數據。本文將詳細介紹如何使用 Java 編寫爬蟲&#xff0c;獲取微店商品詳情。 一、準備工作 &…

【Bug】MAUI自定義彈窗在IOS有異常背景

文章目錄 問題問題代碼原因解決處理Bug的具體步驟 問題 自定義彈窗有異常背景 問題代碼 <mct:Popup xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:converters"clr-names…

C語言酒店管理系統:完整源碼與深度解析

酒店管理系統通過自動化流程提升酒店運營效率。本系統采用C語言開發&#xff0c;基于模塊化設計思想&#xff0c;包含以下核心功能&#xff1a; ?房間管理?&#xff1a;初始化房間信息、查看房間狀態?預訂管理?&#xff1a;按時間段預訂房間、查詢預訂記錄?入住管理?&am…

基于Gold-YOLO的聚合-分發機制改進YOLOv8教程

1. 引言 本文將詳細介紹如何將Gold-YOLO的核心創新——聚合-分發(Gather-and-Distribute, GD)機制集成到YOLOv8架構中。Gold-YOLO是一種創新的目標檢測架構,通過獨特的信息融合策略實現了低延遲和高準確性的理想平衡。 1.1 Gold-YOLO核心特性 Gold-YOLO的主要創新點包括…

blob 的使用 文件下載 圖片預覽 大文件分片上傳

1. 文件下載 function downloadFile(content, filename, type) {const blob new Blob([content], { type });const url URL.createObjectURL(blob);const a document.createElement(a);a.href url;a.download filename;a.click();URL.revokeObjectURL(url); }// 使用示例…

FlinkCDC-Hudi數據實時入湖原理篇

1.Hudi應用場景 面對海量數據開發場景&#xff0c;一種支持存儲多種原始數據格式、多種計算引擎、高效的元數據統一管理的存儲方式能極大的提高開發效率。所以在選擇技術選型的時候&#xff0c;這種存儲方式有以下幾個特點&#xff1a; 存儲原始數據&#xff0c;這些原始數據來…

sqldeveloper 創建新用戶并訪問其他空間特定表和視圖

創建用戶 右鍵選擇創建用戶 1.給用戶取一個名字 VIEW_TEST 2.設置密碼 123456&#xff08;建議用其他&#xff09; 3.選擇表空間和臨時空間 選擇角色 CONNECT 連接角色 選擇系統權限 然后點擊應用就可以了 然后在用戶哪里就能看到這個用戶了 登錄用戶 出現成功就說明可以…

家用電器3d掃描逆向建模中科米堆手持式藍光三維掃描儀數字建模

從廚房里的冰箱、微波爐&#xff0c;到客廳中的電視、空調&#xff0c;再到臥室的加濕器、空氣凈化器等&#xff0c;家用電器極大地提升了我們的生活品質。 家電市場的競爭日益激烈&#xff0c;產品更新換代速度加快&#xff0c;如何快速、精準地獲取現有家電產品的三維數據&a…

從“數據困境”到“數據生態”:DaaS重塑三甲醫院醫療數據治理

從“數據困境”到“數據生態”&#xff1a;DaaS如何重塑三甲醫院醫療數據治理 醫療數據治理的現狀剖析 在智慧醫療蓬勃發展的當下&#xff0c;三甲醫院憑借其豐富的臨床資源&#xff0c;積累了海量、多維度的醫療數據。這些數據猶如一座蘊藏著巨大價值的富礦&#xff0c;涵蓋了…

LVS +Keepalived 高可用群集

目錄 前言一. Keepalived 雙機熱備基礎知識1. Keepalived 概述及安裝&#xff08;1&#xff09;Keepalived 的熱備方式&#xff08;2&#xff09;Keepalived 的安裝與服務控制 2. 使用Keepalived 實現雙機熱備&#xff08;1&#xff09;主服務器的配置&#xff08;2&#xff09…