在图像处理领域,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…