OpenCV 圖像旋轉

一、OpenCV 圖像旋轉介紹

在計算機視覺和圖像處理領域,圖像旋轉是指將圖像圍繞某個中心點按照一定的角度進行轉動。旋轉操作會改變圖像中像素的位置,從而得到新的圖像布局。這一操作在很多場景中都有重要應用,比如文檔矯正、目標檢測時對圖像進行預處理、圖像增強等。

二、OpenCV 中圖像旋轉的原理

三、代碼實現

1. 導入必要的庫

import cv2
import numpy as np

2. 讀取圖像

img = cv2.imread('kele.png')

3. 使用 np.rot90 進行圖像旋轉

# 旋轉 90 度,k=-1 表示順時針旋轉 90 度
rotated_image1 = np.rot90(img, k=-1)
rotated_image2 = np.rot90(img, k=1)

np.rot90 是 NumPy 提供的函數,用于將數組(這里是圖像數據)逆時針旋轉 90 度的倍數。
k 參數指定旋轉的次數。k = -1 表示順時針旋轉 90 度(相當于逆時針旋轉 -90 度),將旋轉后的圖像存儲在 rotated_image1 中。
k = 1 表示逆時針旋轉 90 度,旋轉后的圖像存儲在 rotated_image2 中。

4. 顯示原始圖像和使用 np.rot90 旋轉后的圖像

cv2.imshow('yuantu', img)
cv2.imshow('rotated_image1', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow 函數用于在窗口中顯示圖像。分別顯示原始圖像 img 和兩次旋轉后的圖像 rotated_image1、rotated_image2,窗口標題分別為 yuantu、rotated_image1 和 rotated_image2。
cv2.waitKey(0) 用于等待用戶按鍵。參數 0 表示無限等待,直到用戶按下任意鍵。
cv2.destroyAllWindows 函數用于關閉所有由 OpenCV 打開的窗口。

5. 使用 cv2.rotate 進行圖像旋轉

rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)

cv2.rotate 是 OpenCV 提供的專門用于圖像旋轉的函數。
cv2.ROTATE_90_CLOCKWISE 表示順時針旋轉 90 度,將旋轉后的圖像存儲在 rotated_image 中。
cv2.ROTATE_90_COUNTERCLOCKWISE 表示逆時針旋轉 90 度,旋轉后的圖像存儲在 rotated_image1 中。
cv2.ROTATE_180 表示旋轉 180 度,旋轉后的圖像存儲在 rotated_image2 中。

6. 顯示使用 cv2.rotate 旋轉后的圖像

cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)

再次使用 cv2.imshow 函數顯示三次旋轉后的圖像,窗口標題分別為 shun90(順時針 90 度)、ni90(逆時針 90 度)和 180(旋轉 180 度)。
最后使用 cv2.waitKey(0) 等待用戶按鍵,但代碼中缺少關閉窗口的操作,建議添加 cv2.destroyAllWindows() 以確保程序結束時關閉所有窗口。

完整代碼:

import cv2
import numpy as npimg = cv2.imread('kele.png')
# 旋轉 90 度,k=-1 表示順時針旋轉 90 度
rotated_image1 = np.rot90(img, k=-1)
rotated_image2 = np.rot90(img, k=1)
cv2.imshow('yuantu', img)
cv2.imshow('rotated_image1', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)
cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)

結果顯示:

四、總結
OpenCV 提供了方便快捷的方法來實現圖像旋轉,通過 cv2.getRotationMatrix2D 和 cv2.warpAffine 函數,我們可以輕松完成圖像的旋轉操作。同時,針對旋轉后圖像可能出現的裁剪問題,我們也可以通過調整旋轉矩陣和輸出圖像大小來解決。圖像旋轉在多個領域都有廣泛的應用,對于提高圖像處理和分析的效果具有重要意義。

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

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

相關文章

<C#>在 .NET 開發中,依賴注入, 注冊一個接口的多個實現

在 .NET 開發里,有時一個接口會有多個實現類,此時就需要向依賴注入容器注冊多個實現。下面會詳細介紹不同場景下如何注冊多個實現,以及怎樣從容器中解析這些實現。 1. 注冊多個實現 在 .NET 中,依賴注入容器可以通過不同方式注冊…

idea 保存格式化 但是不格式化 Xml

xml- 其他 - 保持空格勾選上 https://blog.csdn.net/m0_65724734/article/details/128378290?spm1001.2101.3001.6650.8&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-9-128378290-blog-135147277.235%5Ev43%5Epc_blog_bo…

如何在C++中優雅地繪制圖表

如何在C項目中優雅地繪制圖表 matplotlibpreparematplotlibcpp.hpython3vs configuretest Gnuplotpreparegnuplotgnuplot-iostream.hboostvs configuretest MathGL 在C項目中,在進行一些數據分析時往往不夠直觀,若能借助圖表進行分析可以達到事半功倍的效…

vue3使用keep-alive緩存組件與踩坑日記

目錄 一.了解一下KeepAlive 二.使用keep-alive標簽緩存組件 1.聲明Home頁面名稱 三.在路由出口使用keep-alive標簽 四.踩坑點1:可能需要配置路由(第三點完成后有效可忽略) 五.踩坑點2:沒有找到正確的路由出口 一.了解一下Kee…

ros通信機制學習——latched持久化機制

點云的地圖的發送邏輯中,我發現每次使用rostopic echo 時只會打印一次,然后就不會再打印了。并且rviz中也是始終都會顯示的,這里面其實就是用到了latched持久話機制,可以接受這最后一次發布的消息。 我們通過一個具體的項目來學習…

力扣每日打卡 1922. 統計好數字的數目 (中等)

力扣 1922. 統計好數字的數目 中等 前言一、題目內容二、解題方法1. 暴力解法(會超時,此法不通)2. 快速冪運算3. 組合計數的思維邏輯分析組合計數的推導例子分析思維小結論 4.官方題解4.1 方法一:快速冪 三、快速冪運算快速冪運算…

如何使用通義靈碼玩轉Docker - AI助手提升開發效率

一、引言 Docker 作為一種流行的虛擬化技術,能夠幫助開發者快速搭建所需的運行環境。然而,對于初學者來說,掌握 Docker 的基本概念和使用方法可能會遇到一些挑戰。本文將介紹如何利用通義靈碼這一智能編碼助手,幫助你更高效地學習…

從一到無窮大 #45:InfluxDB MCP Server 構建:從工程實踐到價值重構

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。 本作品 (李兆龍 博文, 由 李兆龍 創作),由 李兆龍 確認,轉載請注明版權。 文章目錄 工程實踐遇到的問題MCP Host選擇開發流程 結果展現可能性展望工作生活帶來的變化 MCP…

JAVA SDK通過proxy對接google: GCS/FCM

前言:因為國內調用google相關api需要通過代理訪問(不想設置全局代理),所以在代理這里經常遇到問題,先說一下結論 GCS 需要設置全局代理或自定義代理選擇器, FCM sdk admin 在初始化firebaseApp時是支持設置的。 GCS: 開始時嘗試在…

【NLP】24. spaCy 教程:自然語言處理核心操作指南(進階)

spaCy 中文教程:自然語言處理核心操作指南(進階) 1. 識別文本中帶有“百分號”的數字 import spacy# 創建一個空的英文語言模型 nlp spacy.blank("en")# 處理輸入文本 doc nlp("In 1990, more than 60% of people in East…

關于香橙派OrangePi 5 Ultra 這個開源板子,開發Android

我下載了它資料中的開源Android13 系統SDK, 這個SDK連個git 都沒有,把這種代碼釋放能稱為開源嗎?? 并且也就是說你買了這個板子,里面是沒有任何關于RK3588的開發文檔,如果你沒玩過其他RK平臺,估…

WHAT - React Portal 機制:將子組件渲染到 DOM 的指定節點

文章目錄 適合場景基本語法示例:Modal 彈窗1. 創建一個簡單的 Modal.tsx2. 在 App 中使用 為什么要用 Portal?TypeScript 中 Portal 類型定義? 適合場景 React Portal 是 React 提供的一種機制,讓你可以將子組件渲染到 DOM 的指定…

數據結構---跳表

目錄 一、跳表的概念 為什么要使用隨機值來確定層高 二、跳表的分析 (1)查找過程 (2)性能分析 三、跳表的實現 四、與紅黑樹哈希表的對比 skiplist本質上也是一種查找結構,用于解決算法中的查找問題&#xff0c…

PCDN通過個人路由器,用更靠近用戶的節點來分發內容,從而達到更快地網絡反應速度

PCDN(P2P CDN)的核心思想正是利用個人路由器、家庭寬帶設備等分布式邊緣節點,通過就近分發內容來降低延遲、提升網絡響應速度,同時降低傳統CDN的帶寬成本。以下是其技術原理和優勢的詳細分析: 1. 為什么PCDN能更快&…

用excel做九乘九乘法表

公式: IF($A2>B 1 , 1, 1,A2 & “" & B$1 & “” & $A2B$1,”")

凡泰極客亮相QCon2025鴻蒙專場,解析FinClip“技術+生態”雙引擎

2025年4月10日,備受矚目的QCon開發者技術峰會盛大舉行,本次活動開設鴻蒙專場以“HarmonyOS NEXT 創新特性與行業實踐”為主題,匯聚了眾多鴻蒙生態的領軍人物與技術專家,共同探討鴻蒙操作系統的技術創新與行業應用。 凡泰極客CTO徐…

java HttpServletRequest 和 HttpServletResponse

HttpServletRequest 和 HttpServletResponse 詳解 1. HttpServletRequest(HTTP 請求對象) HttpServletRequest 是 Java Servlet API 提供的接口,用于封裝客戶端的 HTTP 請求信息。它繼承自 ServletRequest,并增加了 HTTP 協議相…

HAL TIM PWM產生 藍橋杯

目錄 0.原理 0.1 CNT和CCR關系 0.2 PWM模式1模式2 1. cubemx配置 需求(將PA1輸出1Khz的 50%占空比的方波) 1.0 PWM的頻率計算: 2.代碼 0.原理 0.1 CNT和CCR關系 CNT計數器和CCR比較器進行比較,如果是向上計數,CNT逐漸增加,CCR是虛線位置,也是用戶自定義的…

python入門:簡單介紹和python和pycharm軟件安裝/學習網址/pycharm設置(改成中文界面,主題,新建文件)

Python 目前是 AI 開發的首選語言 軟件安裝 python解釋器 官網下載 Python |Python.org 勾選 Add python.exe to PATH 將python.exe添加到PATH 勾選這個選項會將Python的可執行文件路徑添加到系統的環境變量PATH中。這樣做的好處是,你可以在命令行中從任何位置直…

CMD命令行筆記

CMD命令行筆記,涵蓋常用命令及實用技巧,適合快速查閱: 一、基礎操作 打開CMD Win R → 輸入 cmd → 回車管理員模式:右鍵開始菜單 → 選擇“命令提示符(管理員)” 常用命令 help:查看所有命令…