OpenCV圖像裁剪與 ROI 操作

? ??在圖像處理領域,ROI(Region of Interest)區域感興趣操作是非常基礎而重要的一環。無論是進行目標檢測、圖像分割,還是簡單的圖像處理,都離不開對圖像某一區域的選取與處理。本文將結合 OpenCV 的 C++ 接口,詳細介紹如何實現圖像的裁剪與 ROI 操作。

? ? ROI(Region of Interest)表示“感興趣區域”,是圖像中你想要單獨處理的一部分。例如,一張 1920×1080 的圖像中,我們只想處理中間 300×300 的區域,這個區域就稱為 ROI。在 OpenCV 中,ROI 通常通過設置圖像的矩形區域來實現。

?

設置 ROI 區域并裁剪圖像

// 定義一個矩形區域 ROI,位置(100, 100),大小(200×150)
cv::Rect roi(100, 100, 200, 150);// 使用 ROI 對圖像進行裁剪
cv::Mat cropped = img(roi);cv::imshow("裁剪后的圖像", cropped);

? ? 以上代碼實現了從大圖像(img)中提取一個局部區域(ROI)圖像cropped。

  • cv::Rect(x, y, width, height) 表示從 (x, y) 點開始,寬為 width,高為 height。
  • img(roi) 返回的是對原始圖像的一塊“視圖”,不復制數據,我們稱作為淺拷貝。

ROI 的復制與修改

因為 ROI 是視圖,所以對其修改會影響原圖。如果你不想修改原圖,應當使用 .clone() 方法。

// clone 后成為一塊新內存區域
cv::Mat roi_copy = cropped.clone();// 在 ROI 上畫一個綠色矩形
cv::rectangle(cropped, cv::Point(0, 0), cv::Point(199, 149), cv::Scalar(0, 255, 0), 2);cv::imshow("在 ROI 上畫矩形(影響原圖)", img);
cv::imshow("ROI 拷貝(不受影響)", roi_copy);

以上代碼中,clone函數返回新的內存數據區域,因此稱作深拷貝。我們在cropped上繪制一個矩形區域,由于cropped是img的淺拷貝,img數據上同樣也會繪制一個矩形。

?

用 ROI 做遮罩處理

// 創建一個遮罩
cv::Mat mask = cv::Mat::zeros(img.size(), CV_8UC1);
mask(roi).setTo(255);  // 設置 ROI 區域為白色// 提取 ROI 區域內容
cv::Mat result;
img.copyTo(result, mask);  // 使用遮罩復制內容cv::imshow("遮罩提取 ROI", result);

以上代碼生成了一個mask遮罩,對于mask矩陣中的非零區域被視作有效區域,因此函數copyTo僅拷貝mask中非零區域所對應的img像素。

?

在 ROI 上應用圖像處理(如模糊)

cv::Mat blurred;
cv::GaussianBlur(img(roi), blurred, cv::Size(15, 15), 0);// 將模糊圖像復制回原圖對應 ROI
blurred.copyTo(img(roi));cv::imshow("對 ROI 模糊處理后的圖像", img);

在OpenCV中,很多函數可以傳入一個ROI區域。因此我們在對圖像局部區域進行操作時,可以不需要重新生成新的局部圖像即可完成。但是注意一些特殊的函數可能不支持ROI區域操作,如cv::Mat::reshape(),cv::medianBlur()等。

?

完整代碼

int main() {cv::Mat img = cv::imread("lena.png");if (img.empty()) {std::cerr << "無法讀取圖像!" << std::endl;return -1;}// 定義 ROI 區域,這是一個200*150的區域,左上角坐標為(100,100)// cropped定義了一個 ROI 矩陣,但和img使用相同的數據區域cv::Rect roi(100, 100, 200, 150);cv::Mat cropped = img(roi);cv::imwrite("1_cropped.png", cropped);// 在 ROI 上畫框cv::rectangle(cropped, cv::Point(0, 0), cv::Point(199, 149), cv::Scalar(0, 255, 0), 2);cv::imwrite("2_rect.png", cropped);// ROI 的拷貝// 使用cv::Mat::clone函數進行深拷貝,roi_copy有單獨的數據內存cv::Mat roi_copy = cropped.clone();cv::imwrite("3_roi_copy.png", roi_copy);// 遮罩提取// 生成一個mask遮罩,在roi區域內為255,其他區域為0cv::Mat mask = cv::Mat::zeros(img.size(), CV_8UC1);mask(roi).setTo(255);cv::imwrite("4_mask.png", mask);// 使用mask遮罩拷貝數據,此時僅將img圖像中mask遮罩對應的數據拷貝到result中// 注意:copyTo也是深拷貝,并且該函數支持mask操作cv::Mat result;img.copyTo(result, mask);cv::imwrite("5_result.png", result);// 僅對 ROI 模糊處理// OpenCV中大多數函數支持基于ROI的操作,但有部分函數確不支持(需要特別留意)cv::Mat blurred;cv::blur(img(roi), blurred, cv::Size(15, 15));cv::imwrite("6_blurred.png", blurred);// 將模糊后圖像拷貝到原圖指定 ROI 上,copyTo支持 ROI 輸入blurred.copyTo(img(roi));cv::imwrite("7_img.png", img);return 0;
}

對局部區域進行平滑操作

?

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

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

相關文章

關于AI應用案例計算機視覺、自然語言處理、推薦系統和生成式AI四大領域的詳細技術分析。

一、計算機視覺應用&#xff1a;實時物體檢測 案例描述&#xff1a;使用YOLOv8模型實現實時物體檢測系統&#xff0c;應用于安防監控場景。 1. 代碼示例&#xff08;Python&#xff09; python from ultralytics import YOLO import cv2# 加載預訓練模型 model YOLO("…

各個網絡層擁有的協議簡寫

OSI 七層模型&#xff08;從下到上分別為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層&#xff09;是網絡通信的經典理論框架&#xff0c;每層都有其核心功能和對應的協議。以下是各層的主要協議列舉&#xff1a;1. 物理層&#xff08;Physical Layer&#xff…

django基于Python的設計師作品平臺的數據可視化系統設計與實現

django基于Python的設計師作品平臺的數據可視化系統設計與實現

等保測評-RabbitMQ中間件

RabbitMQ-docker部署查看版本&#xff1a;rabbitmqctl version、rabbitmqctl status | grep version配置文件&#xff1a;一般為rabbitmq.conf端口號&#xff1a;一般為15672一、身份鑒別a&#xff09;應對登錄的用戶進行身份標識和鑒別&#xff0c;身份標識具有唯一性&#xf…

Linux操作系統從入門到實戰(十六)馮諾依曼體系結構,操作系統與系統調用和庫函數概念

Linux操作系統從入門到實戰&#xff08;十六&#xff09;馮諾依曼體系結構&#xff0c;操作系統與系統調用和庫函數概念前言一、馮諾依曼體系結構1. 馮諾依曼體系是什么&#xff1f;2. 核心部件有哪些&#xff1f;3. 數據是怎么跑的&#xff1f;4. 發文件的流程也一樣5. 為什么…

廣東省省考備考(第七十二天8.10)——言語理解與表達、判斷推理(強化訓練)

小模考&#xff08;言語、常識&#xff09; 錯題解析 本題可從第二空入手。轉折前后語意相反&#xff0c;轉折前指出“投資對經濟拉動只能發揮短期的作用”&#xff0c;故轉折后應表達“最終消費對經濟拉動才能發揮長期的作用”。A項“持久”、D項“長期”均符合文意&#xff0…

數據庫刪除術:邏輯刪除 vs 物理刪除,選錯毀所有

你以為刪除數據就是點個按鈕&#xff1f;背后藏著數據安全的生死抉擇&#xff01; 本文揭秘兩種刪除方式的本質區別&#xff0c;用真實案例教你避免災難性數據丟失。一、刪除的本質:數據消失的兩種方式 &#x1f9ea; #mermaid-svg-pVylRd9e5p4VE5G0 {font-family:"trebuc…

【Python 小腳本·大用途 · 第 3 篇】

1. 痛點 100 字 硬盤里散落著 IMG_2024(1).jpg、IMG_2024(1) (1).jpg、下載目錄里同名但大小不同的視頻…… 手動比對既耗時又容易誤刪。今天用 30 行 Python 腳本&#xff0c;基于「內容哈希」一鍵找出并刪除重復文件&#xff0c;支持多目錄遞歸、白名單、空目錄清理。2. 腳本…

【網絡與爬蟲 52】Scrapyd-k8s集群化爬蟲部署:Kubernetes原生分布式爬蟲管理平臺實戰指南

關鍵詞: Scrapyd-k8s, Kubernetes爬蟲部署, 容器化爬蟲管理, 云原生數據采集, 分布式爬蟲集群, Docker爬蟲, K8s工作負載, Scrapy部署自動化 摘要: 本文深入解析Scrapyd-k8s這一革命性的Kubernetes原生爬蟲管理平臺&#xff0c;通過費曼學習法從傳統部署痛點出發&#xff0c;詳…

Spring WebSocket安全認證與權限控制解析

一、認證架構設計 1.1 WebSocket安全認證流程 #mermaid-svg-23pyTyZe6teZy3Hg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-23pyTyZe6teZy3Hg .error-icon{fill:#552222;}#mermaid-svg-23pyTyZe6teZy3Hg .error-t…

復現論文《多無人機協同任務分配算法設計與實現》

1. 論文標題 多無人機協同任務分配算法設計與實現 The Design and Implementation of Multi-UAVs Cooperative Task Assignment Algorithm 2. 內容概括 該論文針對異構多無人機協同執行多目標多類型任務時的分配問題展開研究。首先提出“兩階段”任務分配結構:第一階段通過…

MCU-基于TC397的啟動流程

TC397的啟動流程(Start Sequence) 整體啟動流程包括固件啟動(Boot Firmware)和 Bootloader 和軟件啟動(Application start-up software)三個階段。 1. Boot Firmware:是芯片上電后最開始執行的代碼,代碼由英飛凌供應商固化在BootRom中的,不可編程,沒辦法對BootRom中的…

單片機畢業設計模板|畢設答辯|畢業設計項目|畢設設計|單片機物聯網畢業設計|基于STM32單片機的紗管圖像識別系統設計

畢業設計題目&#xff1a;基于STM32單片機的紗管圖像識別系統設計1. 需求分析目標用戶&#xff1a;紡織行業&#xff0c;自動化生產線&#xff0c;質量檢測等。核心功能&#xff1a;實時識別和檢測紗管的外觀缺陷&#xff08;如破損、色差等&#xff09;。提供數據記錄和報告功…

谷歌DeepMind發布Genie 3:通用型世界模型,可生成前所未有多樣化的交互式虛擬環境

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

202506 電子學會青少年等級考試機器人二級理論綜合真題

更多內容和歷年真題請查看網站&#xff1a;【試卷中心 -----> 電子學會 ----> 機器人技術 ----> 二級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 2025年6月 青少年等級考試機器人理論真題二級 第 1 題 如圖&#xff0c;這是中國古代發明的指南車模型&am…

【YOLO11改進 - C3k2融合】C3k2融合EBlock(Encoder Block):低光增強編碼器塊,利用傅里葉信息增強圖像的低光條件

YOLOv11目標檢測創新改進與實戰案例專欄 文章目錄&#xff1a; YOLOv11創新改進系列及項目實戰目錄 包含卷積&#xff0c;主干 注意力&#xff0c;檢測頭等創新機制 以及 各種目標檢測分割項目實戰案例 專欄鏈接: YOLOv11目標檢測創新改進與實戰案例 文章目錄YOLOv11目標檢測創…

MACBOOK M1安裝達夢8數據庫

前提已安裝好了docker 然后通過docker-compose安裝 version: 2.1 services:DM8:image: qinchz/dm8-arm64:8.1.8.128container_name: dm8ports:- "52330:5236"mem_limit: 2gmemswap_limit: 2genvironment:- TZAsia/Shanghai- LANGen_US.UTF-8volumes:- /Users/a1/dock…

2013年考研數學(二)真題

一、選擇題(1)考點&#xff1a;低階無窮小定義、高階無窮小定義、同階無窮小定義、等階無窮小定義、移項變形/極限存在并且分母→0時則分子也→0方法一&#xff1a;方法二&#xff1a;(2)考點&#xff1a;說不清楚的思路/湊導數定義式、洛必達法則、隱函數求導方法一&#xff1…

WinForm 復合控件(用戶控件):創建與使用指南

目錄 添加流程示意圖 復合控件的核心價值 與自定義控件的區別 創建步驟 建好的示例控件 ?使用方法&#xff08;代碼示例&#xff09; 設計原則 添加流程示意圖 點擊添加 添加成功 每更新一次復合控件的內容&#xff0c;就需要生成一次 ↓ 添加好復合控件后點這里更新一…

隨機向量正交投影定理(Orthogonal Projection Theorem, OPT)_學習筆記

前言 隨機向量正交投影定理&#xff08;Orthogonal Projection Theorem, OPT&#xff09; 是理解和推導卡爾曼了濾波&#xff08;Kalman Filtrering, KF&#xff09; 重要理論工具&#xff0c;簡化卡爾曼最優濾波方程推導過程并提供數學嚴密性。本文介紹該定理內容及證明過程&a…