OpenCV中的圖像旋轉方法詳解

文章目錄

    • 引言
    • 1. 簡單的旋轉:cv2.rotate()
    • 2. 任意角度旋轉:cv2.getRotationMatrix2D() + cv2.warpAffine()
    • 結論

引言

在計算機視覺和圖像處理領域,圖像旋轉是一項基礎而重要的操作。OpenCV作為最流行的計算機視覺庫之一,提供了多種實現圖像旋轉的方法。本文將詳細介紹OpenCV中的各種旋轉技術,幫助讀者理解它們的原理、適用場景以及具體實現方法。

1. 簡單的旋轉:cv2.rotate()

OpenCV提供了最簡單的旋轉函數cv2.rotate(),它支持90度、180度和270度的順時針旋轉。

import cv2# 讀取圖像
img = cv2.imread('image.jpg')# 順時針90度旋轉
rotated_shun90 = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE) #順時針旋轉90度# 180度旋轉
rotated_180 = cv2.rotate(img, cv2.ROTATE_180)#逆時針90度旋轉
rotated_ni90 = cv2.rotate(img,cv2.ROTATE_90_COUNTERCLOCKWISE) #逆時針旋轉90度

我們現在使用一張可樂瓶的圖片作為原圖:
在這里插入圖片描述
而運行結果如下:
在這里插入圖片描述
這段代碼也可使用numpy庫中的方法來表示:

import cv2
import numpy as npimg = cv2.imread('image.jpg')# 旋轉 90 度,k=-1 表示順時針旋轉 90 度
rotated_image1 = np.rot90(img,k=-1)
# 旋轉 90 度,k=1 表示逆時針旋轉 90 度
rotated_image2 = np.rot90(img,k=1)

這段代碼與上面所表示的代碼實現的功能是一樣的

優點

  • 實現簡單
  • 計算速度快
  • 不會引入插值偽影

缺點

  • 只能旋轉特定角度
  • 不能自定義旋轉中心

2. 任意角度旋轉:cv2.getRotationMatrix2D() + cv2.warpAffine()

對于任意角度的旋轉,OpenCV提供了更靈活的方法組合:

# 獲取圖像高度和寬度
(h, w) = img.shape[:2]# 定義旋轉中心(圖像中心)
center = (w // 2, h // 2)# 定義旋轉角度(45度)和縮放因子(1.0表示不縮放)
angle = 45
scale = 1.0# 獲取旋轉矩陣
M = cv2.getRotationMatrix2D(center, angle, scale)# 應用仿射變換進行旋轉
rotated = cv2.warpAffine(img, M, (w, h))

以下是運行結果:
在這里插入圖片描述

參數說明

  • center: 旋轉中心點坐標
  • angle: 旋轉角度(正值為逆時針)
  • scale: 縮放因子

優點

  • 支持任意角度旋轉
  • 可以自定義旋轉中心
  • 可以同時進行縮放

缺點

  • 旋轉后圖像角落可能被裁剪
  • 需要插值處理,可能引入偽影

結論

OpenCV提供了豐富而強大的圖像旋轉功能,理解這些方法的原理和適用場景,可以幫助我們在實際應用中選擇最合適的旋轉策略,平衡速度和質量需求。

希望本文能幫助您更好地理解和使用OpenCV中的旋轉方法。在實際應用中,建議根據具體需求選擇合適的方法,并通過實驗調整參數以獲得最佳效果。

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

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

相關文章

C/C++ | 靜態修飾符static

文章目錄 概述一、定義介紹二、功能作用(一)static修飾全局變量(二)static修飾局部變量(三)static修飾成員變量(四)static修飾全局函數(五)static修飾成員函數三、代碼實例(一)static初始化被多次調用概述 本節詳細介紹了static修飾符的原理及用法。包括在變量、函數、類內等…

canvas畫板!隨意畫!!

希望你天天開心 代碼&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>繪畫板</title…

Elasticsearch 使用reindex進行數據同步或索引重構

1、批量復制優化 POST _reindex {"source": {"index": "source","size": 5000},"dest": {"index": "dest"} }2、提高scroll的并行度優化 POST _reindex?slices5&refresh {"source": {…

Debian 12.10 root 登錄失敗,兩步解決!

大家好&#xff0c;這里是 DBA學習之路&#xff0c;專注于提升數據庫運維效率。 前言 今天看到 debian 正式發布 12.10&#xff0c;安裝完成后發現無法登錄 root 用戶&#xff1a; 這里我一開始懷疑是 root 密碼錯了&#xff0c;所以改了一下 root 密碼&#xff0c;忘記 root …

systemctl 命令詳解與常見問題解決

在 Linux 系統中&#xff0c;service 命令和 chkconfig 命令一直用于管理服務&#xff0c;但隨著 systemd 的引入&#xff0c;systemctl 命令逐漸成為主流。systemctl 命令不僅功能強大&#xff0c;而且使用簡單。本文將詳細介紹 systemctl 命令的作用以及常見問題的解決方法。…

【爬蟲】DrissionPage-獲取douyim用戶下的視頻

之前看過DrissionPage&#xff0c;覺得很厲害&#xff0c;比selenium簡單&#xff0c;適合新手。因為盲目跟風逆向&#xff0c;今天看了一個DrissionPage案例直播&#xff0c;學習一下&#xff0c;真香哈。 DrissionPage官網&#xff1a;&#x1f6f0;? 概述 | DrissionPage官…

中國礦業大學iGMAS分析中心介紹

一、關于GNSS和iGMAS 在浩瀚的太空中&#xff0c;全球衛星導航系統&#xff08;GNSS&#xff09;構建起精準定位的時空基準。IGMAS——國際GNSS監測評估系統&#xff0c;是由中國倡導并主導建設的全球GNSS監測網絡&#xff0c;旨在提供高精度、高可靠的導航、定位與授時服務。 …

清理HiNas(海納斯) Docker日志并限制日志大小

我在一個機頂盒的HiNas系統上跑Octoprint的docker版本&#xff0c;每隔一段時間盒子空間就被占完了&#xff0c;運行df -h之后&#xff0c;顯示/dev/root Use 100%。 Filesystem Size Used Avail Use% Mounted on /dev/root 6.6G 6.6G 0 100% / devtmpfs …

RK3588芯片NPU的使用:yolov8-pose例子圖片檢測在安卓系統部署與源碼深度解析(rknn api)

一、本文的目標 將yolo8-pose例子適配安卓端,提供選擇圖片后進行姿態識別功能。通過項目學習源碼和rknn api。二、開發環境說明 主機系統:Windows 11目標設備:搭載RK3588芯片的安卓開發板核心工具:Android Studio Koala | 2024.1.1 Patch 2,NDK 27.0三、適配(遷移)安卓 …

DeepSeek本地部署手冊

版本:v1.0 適用對象:零基礎開發者 一、部署前準備 1.1 硬件要求 組件最低配置推薦配置說明CPUIntel i5 8代Xeon Gold 6230需支持AVX指令集內存16GB64GB模型越大需求越高GPUNVIDIA GTX 1060 (6GB)RTX 3090 (24GB)需CUDA 11.7+存儲50GB可用空間1TB NVMe SSD建議預留2倍模型大小…

HashMap的源碼解析

HashMap基于哈希表的Map接口實現&#xff0c;是以key-value存儲形式存在&#xff0c;即主要用來存放鍵值對。HashMap的實現不是同步的&#xff0c;這意味著它不是線程安全的。它的key、value都可以為null。此外&#xff0c;HashMap中的映射不是有序的。 JDK1.8 之前 HashMap由數…

論文精讀:大規模MIMO波束選擇問題的量子計算解決方案

論文精讀&#xff1a;大規模MIMO波束選擇問題的量子計算解決方案 概要&#xff1a; 隨著大規模多輸入多輸出系統&#xff08;MIMO&#xff09;在5G及未來通信技術中的應用&#xff0c;波束選擇問題&#xff08;MBS&#xff09;成為提升系統性能的關鍵。傳統的波束選擇方法面臨計…

DPIN河內AI+DePIN峰會:共繪藍圖,加速構建去中心化AI基礎設施新生態

近日&#xff0c;一場聚焦前沿科技融合的盛會——AIDePIN峰會在越南河內成功舉辦。此次峰會由DPIN、QPIN及42DAO等Web3領域的創新項目聯合組織&#xff0c;匯聚了眾多Web3行業領袖、技術專家與社區成員。峰會于2025年4月19日舉行&#xff0c;其核心議題圍繞去中心化物理基礎設施…

品牌公關如何邀請媒體采訪?|微信文案模版

傳媒如春雨&#xff0c;潤物細無聲&#xff0c;大家好&#xff0c;我是51媒體胡老師。 &#x1f4f8;?不論是舉行活動、展會、發布會、推介會&#xff0c;還是新店開業&#x1f389; 都需要邀約媒體出席活動并采訪報道&#x1f3a4;&#x1f4f0; 我們需要在活動前提醒媒體參…

影樓精修-手部青筋祛除算法解析

注意&#xff1a;本文樣例圖片為了避免侵權&#xff0c;均使用AIGC生成&#xff1b; 手部青筋祛除科普 手部青筋祛除是影樓精修中一個非常精細的工作&#xff0c;需要較高的修圖技巧&#xff0c;目前市面上很少有自動化的青筋祛除功能的&#xff0c;而像素蛋糕目測是第一個做到…

智慧景區國標GB28181視頻平臺EasyGBS視頻融合應用全場景解決方案

一、方案背景? 隨著旅游業的蓬勃發展&#xff0c;景區的規模不斷擴大&#xff0c;游客數量持續增長&#xff0c;對景區的安全管理和游客服務質量提出了更高要求。打造一個高效、智能的視頻監控及管理系統成為景區運營的關鍵。EasyGBS作為一款基于國標GB28181協議的視頻云服務…

dedecms織夢arclist標簽noflag屬性過濾多個參數

織夢dedecms系統arclist標簽noflag屬性默認是只能過濾一個參數&#xff0c;比如過濾推薦是noflagc&#xff0c;過濾有圖片的文章是noflagc&#xff0c;在模板制作過程中&#xff0c;有時候我們為了seo和避免重復&#xff0c;需要過濾多個參數。今天小編就來跟大家講講織夢dedec…

如何用go語言搭MCP

1.什么是MCP? MCP是“模型上下文協議(Model Context Protocol)”的簡稱,用一句簡單通俗易懂的話描述: 是一種讓 AI 模型能夠無縫連接到外部工具和數據源的標準化方式。想象它就像 AI 的“萬能接口”,能讓 AI 像用 USB 線連接設備一樣,輕松調用其他程序或服務。2.官方M…

js 的call 和apply方法用處

主要用于ECMAScript與宿主環境&#xff08;文檔對象&#xff08;DOM&#xff09;、瀏覽器對象&#xff08;BOM&#xff09;&#xff09;的交互中&#xff1b; 例子&#xff1a;function changeStyle(attr, value){ this.style[attr] value; } …

移動通信行業術語

英文縮寫英文全稱中文名稱解釋/上下文舉例IMSIP Multimedia SubsystemIP多媒體子系統SIPSession Initiation Protocol會話初始化協議常見小寫sip同。ePDG/EPDGEvolved Packet Data Gateway演進分組數據網關 EPDG是LTE&#xff08;4G&#xff09;和后續蜂窩網絡架構&#xff08;…