Opencv中的ROI介绍

opencv基础-07-感兴趣区域(ROI) 在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest,ROI)。在设定感兴趣区域 ROI 后,就可以对该区域进行整体操作。以下是一些。 阅读详情
Opencv中的ROI介绍
cvSetImageROI(该函数用起来可能有问题。当把一个区域定义为ROI后,如果在另外一个函数中直接把这个ROI当做图片处理,而不加以特殊对待会出问题!)
ROI(Region of Interest)是指图像中的一个矩形区域,可能你后续的程序需要单独处理这一个小区域,如图所示



如上图所示,就是ROI的一个例子,如果你对图像设置了ROI,那么,Opencv的大多数函数只在该ROI区域内运算(只处理该ROI区域),如果没设ROI的话,就会出来整幅图像。
ROI非常有用,例如我们想把图像中的人脸扣出来,进行人脸识别。需要注意的时候,ROI一定在图像内部,而不能超出图像的范围。


对图像设定ROI的函数是:


cvSetImageROI(IplImage* src,CvRect rect);
src表示的是源图像,rect只的是ROI区域。


如果要取消ROI区域,那么使用函数:


cvResetImageROI(IplImage* src);
这个函数,就把src上的ROI区域取消掉。


下面举几个例子:


例子1:
从一幅大图像中,取出一小块图像并保存这一个小块图像。
代码如下:
/* 读取大图像 */
IplImage *img1 = cvLoadImage("elvita.jpg", 1);

/* 设置图像的ROI区域
   注意ROI区域不要越界,必须在大图像的内部 */
cvSetImageROI(img1, cvRect(10, 15, 150, 250));

/* 为小图像分配内存空间
   cvGetSize(img1)返回的是一个CvSize结构体,意思就是返回了图像img1的宽度和高度,由于
img已经设置了ROI,所以cvGetSize函数对ROI区域有效,所以,返回的是ROI区域的宽度和高度 */
IplImage *img2 = cvCreateImage(cvGetSize(img1),
                               img1->depth,
                               img1->nChannels);

/* 把img1的ROI区域拷贝到img2*/
cvCopy(img1, img2, NULL);

/* 取消img1上的ROI区域 */
cvResetImageROI(img1);




例子2:
两幅不同大小的图像相加
/* 加载图像
   注意,这两幅图像有不同的宽度和高度 */
IplImage *img1 = cvLoadImage("elvita.jpg", 1);  /* 大图像  */
IplImage *img2 = cvLoadImage("fifi.jpg", 1);    /* 较小的图像*/

/* 定义ROI区域的坐标*/
CvRect rect = cvRect(25, 25, img2->width, img2->height);

/* 对图像img1设置ROI1区域 */
cvSetImageROI(img1, rect);

/* 两幅图像相加
   注意,通过对img1设置ROI区域后,两幅图像,其实有相同的宽度和高度了。 */
cvAdd(img1, img2, img1, NULL);

/* 取消感兴趣区域,即ROI区域*/
cvResetImageROI(img1);




例子3:在一个特定区域进行模板匹配 ( 关于模板匹配的完整代码下载 )
IplImage *src = cvLoadImage("myphoto.jpg", 1);
IplImage *template = cvLoadImage("eye.jpg", 1);

CvRect rect = cvRect(25, 25, 120, 120);

//设置ROI区域
cvSetImageROI(src, rect);

IplImage *result = cvCreateImage(cvSize(rect.width  - tpl->width  + 1,
                                     rect.height - tpl->height + 1),
                              IPL_DEPTH_32F, 1);

/* 进行模板匹配 */
cvMatchTemplate(src, template, result, CV_TM_SQDIFF);

/* 查找最匹配的坐标 */
CvPoint    minlocation, maxlocation;
double    minvalue, maxvalue;
cvMinMaxLoc(result, &minvalue, &maxvalue, &minlocation, &maxlocation, 0);

/* 在源图像上画出矩形*/
cvRectangle(src,
            cvPoint(minlocation.x, minlocationc.y),
            cvPoint(minlocation.x + template->width, minlocationc.y + template->height),
            CV_RGB(255, 0, 0), 1, 0, 0 );

cvResetImageROI(src);


在上面的例子中,先定义ROI区域,再进行模板匹配,这样会加快匹配的速度,因为,只在ROI区域进行模板匹配运算。


例子4:ROI区域像素值的访问
可以想把ROI区域拷贝到一幅新的图像中,然后再访问其像素值


/* 假设已经有了一幅 8-bit 3通道图像*/


/* ROI的坐标*/
CvRect rect = cvRect(10, 20, 50, 60);


/* ROI区域的子图像 */
IplImage* subimg;


/* 设置ROI区域 */
cvSetImageROI(img, rect);


//ROI区域拷贝
cvCopy(img, subimg, NULL);


//释放ROI区域
cvResetImageROI(img);


/* 然后,就可以对subimg进行访问,其实就是访问ROI区域 */


或者可以通过ROI的左边信息进行访问




/* ROI区域的坐标 */
CvRect rect = cvRect(10, 20, 50, 60);


//设置ROI区域
cvSetImageROI(img, rect);


/* 假设,把整个ROI区域赋值为0 */
for (i = rect.y; i < (rect.y + rect.height); i++) {
    for (j = rect.x; j < (rect.x + rect.width); j++) {
        ((uchar*)(img->imageData + i * img->widthStep))[j*3] = 0;
        ((uchar*)(img->imageData + i * img->widthStep))[j*3+1] = 0;
        ((uchar*)(img->imageData + i * img->widthStep))[j*3+2] = 0;
    }
}

cvResetImageROI(img);
edited by  www.opencvchina.com
OpenCV(2):ROI提取,单通道处理与边界填充 昨天学习了图像的基本操作和视频的基本操作,那么今天学习的内容就是昨天的进一步深入,ROI提取和波段单独处理与边界填充 阅读详情

相关推荐

OpenCV入门4:ROI区域操作

上述示例代码展示了如何设置ROI区域、复制和粘贴ROI、进行ROI区域的操作和计算。通过cv::Rect类型的矩形来定义ROI区域的位置和大小,然后使用cv::Mat的成员函数cv::Mat::operator()(const cv::Rect&)来设置ROI。所有的图像操作和计算都可以在ROI区域内进行,例如通过cv::Mat的成员函数cv::Mat::setTo()将ROI区域像素设置为指定的值。可以使用cv::Mat的成员函数cv::Mat::copyTo()来实现ROI区域的复制和粘贴。

噌胥苑——行思驿站 3207

[opencv教程(三)]ROI区域(图片截取)

ROI

qq_44619702的博客 5053

【OpenCV】复制、切割出图像ROI区域

举例: #include #include using namespace cv; // 从一幅大图像中,取出一小块图像。 int main() { /* 读取大图像 */ IplImage *img1 = cvLoadImage("C:\\Users\\Liu\\Desktop\\a2.bmp", -1); cvNamedWindow("Cut", CV_WINDOW_AUTOSIZ

Hao_09的专栏 5610

opencv——感兴趣区域(ROI)的分析和选取[详细总结]

引言 在利用OpenCV对图像进行处理时,通常会遇到一个情况,就是只需要对部分感兴趣区域进行处理。因此,如何选取感兴趣区域呢?(其实就是“抠图”)。 在学习opencv的掩码运算后,尝试实现一个类似halcon的reduce_domain功能,对于实现抠图的过程中,需要掌握的要点就是位运算符和copyTo函数???? 位运算符的相关API: void bitwise_and(InputArray......

明月清风@的博客 9706

OpenCV--0016:图像ROI与ROI操作

图像ROI 图像ROI(region of interest)是指图像中感兴趣的区域。 在OpenCV中设置图像ROI区域,只对图像感兴趣的区域操作。 图像ROI操作 矩形感兴趣区域 从图像中提取感兴趣的区域有两种方法: 使用构造函数 使用Rect函数; //创建宽度为320,高度240的3通道图像img Mat img(Size(320,240),CV_8UC3); //提...

WaitFoF 3408

HALCON-OpenCV-ROI绘制截取ROI图像

1.HALCON中ROI区域实现,图像截取 read_image (Board, 'E:/Images/board.jpg') gen_circle (ROI_Circle, 252, 190, 17) gen_rectangle1 (ROI_Rect, 323, 356, 416, 490) gen_rectangle2 (ROI_RectPHi, 183, 240, rad(-46), 51, 20) gen_ellipse (ROI_Ellipse, 265, 417, rad(0), 43,

liyuqian199695的博客 2463

OpenCV-Python 选择ROI

OpenCV-Python选择ROI1. 矩形ROI,直接使用切片,简单粗暴2. 使用OpenCV中的一些函数获取ROI区域,这个用的最多3. 使用鼠标获取ROI区域4. 鼠标获取多边形ROI 1. 矩形ROI,直接使用切片,简单粗暴 import cv2 src = cv2.imread("D:\\python_script\\ffff\\qipan.png") roi = src[20:15...

红叶谷 wsp_1138886114的博客 2万+

利用OpenCV实现鼠标选择图像中的矩形ROI

OpenCV,即Open Source Computer Vision Library,是一个开源的计算机视觉和机器学习软件库。自2000年首次发布以来,它已经成为该领域中最广泛使用和最强大的库之一。OpenCV由C++编写而成,支持多种编程语言的接口,包括Python、Java、MATLAB等。它不仅适用于Windows平台,还支持Linux和Mac OS X等操作系统。作为一个轻量级的库,OpenCV的设计注重性能和实时处理,广泛应用于学术界和工业界的研究与开发。

weixin_42575505的博客 1171

【OpenCV 4】图像ROI操作

OpenCV 4.1.0 图像ROI操作(C++代码演示)。 编程环境:OpenCV 4.1.0 + Visual Studio 2017

风语留痕 2024

学习OpenCV 3 中文版.rar

学习OpenCV 3 中文版(PDF)经典教程,最新的教程详细介绍了opencv的算法集成及机器学习部分内容。

使用cubeMX生成USB HID设备

本文主要介绍如何使用stm32开发板和cubeMX生成HID设备,供参考。

专注音频,高效工作,快乐生活! 970

Opencv-图像ROI与ROI操作

图像ROI与ROI操作知识点python代码 知识点 图像ROI与ROI操作 图像ROI解释: 图像的ROI(region of interest)是指图像中感兴趣区域、在OpenCV中图像设置图像ROI区域,实现只对ROI区域操作。 矩形ROI区域提取 矩形ROI区域copy 不规则ROI区域 ROI区域mask生成 像素位 and操作 提取到ROI区域 加背景or操作 add...

weixin_41709536的博客 1万+

USB 3.0 高清音视频采集芯片——MS2130

MS2130 是一款 USB 3.0 高清视频和音频采集芯片,内部集成 USB3.0 Device 控制器、数据收发模块、音视频处理模块。

YOU_SeMi的博客 7859

OpenCV+Python选择ROI

OpenCV-Python选择ROI 矩形ROI,直接使用切片,简单粗暴 使用OpenCV中的一些函数获取ROI区域,这个用的最多 使用鼠标获取ROI区域 鼠标获取多边形ROI 1. 矩形ROI,直接使用切片,简单粗暴 import cv2 src = cv2.imread("D:\\python_script\\ffff\\qipan.png...

liuxiaohuidegushi的博客 2959

《Swin-Unet: 类Unet的纯Transformer架构用于医学图像分割》学习笔记

近年来,卷积神经网络(CNN)在医学图像分析领域取得了重要进展。尤其是基于U形架构和跳跃连接的深度神经网络广泛应用于各种医学图像任务。然而,尽管CNN表现优异,但由于卷积操作的局部性,其难以很好地学习全局和长距离语义信息的交互。在本文中,我们提出了Swin-Unet,一种用于医学图像分割的类Unet纯Transformer模型。被切分为Token的图像块输入到基于Transformer的U形编码器-解码器架构中,通过跳跃连接实现局部和全局语义特征的学习。

学无止境。 5547

告别手动复制粘贴!用R语言脚本批量抓取TCMSP中药靶点基因(附完整代码)

本文介绍如何使用R语言脚本自动化抓取TCMSP数据库中的中药靶点基因数据,告别手动复制粘贴的低效操作。通过详细的代码示例和参数设置,帮助研究人员快速获取并过滤符合药代动力学标准的中药成分及其靶点基因,大幅提升研究效率。特别适合生物信息学和中药现代化研究领域的从业者。

weixin_26950847的博客 264

Opencv回顾--Roi和掩膜操作

主要函数 构建Roi的两种方式 1)使用Rect函数,指定矩形的左上角坐标和矩形的长宽来定义一个矩形区域作为ROI区域; Rect rect(cx - 100, cy - 100, 200, 200); //先建立一个矩形 Mat roi = src(rect); 2)利用Range来指定感兴趣的行和列的范围,Range是指从初始索引到终止索引的(不包括终止索引)的一段连续序列; Mat ...

shuayang1155的博客 1236

固定时间收敛的控制器设计(基础知识)

针对控制系统的有限时间收敛和固定时间收敛给出一些常用定理。

qq_40241332的博客 1万+

学习opencv之(六)-图像切割,使用ROI

一.ROI介绍 在OpenCV中我们能够非常方便地获取指定ROI区域的子图像。如果你对图像设置了ROI,那么,Opencv的大多数函数只在该ROI区域内运算(只处理该ROI区域),如果没设ROI的话,就会出来整幅图像。 ROI非常有用,例如我们想把图像中的人脸扣出来,进行人脸识别。需要注意的时候,ROI一定在图像内部,而不能超出图像的范围。 对图像设定ROI的函数是: cvSetI

ITer,home聪明在于勤奋,天才在于积累 6万+

matlab内读取文件目录时斜杠和反斜杠的使用

@matlab内读取文件目录时斜杠和反斜杠的使用TOC matlab内读取文件目录时,斜杠和反斜杠的使用 最近被斜杠和反斜杠弄晕了,于是总结了一下,在此和大家分享一下。 代码 clear; clc; close all; I1= imread('..\zs1.jpg'); %和代码文件夹同目录的图片 (纯反斜杠) I2= imread('../zs2/zs2.j...

weixin_44456694的博客 6574

【实战学习(五)】开源项目学习之uWSGI的部署以及配合nginx

文章目录1)uWSGI是什么?1.1 WSGI1.1.1 Application端1.1.2 Server端1.1.3 WSGI中间件1.2 uwgi1.3 uWSGI、WSGI、uwsgi之间的关系*为什么有了uWSGI为什么还需要nginx?2)连接uwsgi和Django*避坑之Windows10安装uWSGI非常极其艰难,最好勿浪费时间,直接转战Linux吧:2.1 uWGI部署2.1.1 在虚拟环境下安装uwsgi:2.1.2 测试uWSGI的运行2.1.3 使用uWSGI运行Django项目2.

黑黑白白君的博客 1507
下一篇: VS2010中GetMenu()和GetSubMenu(0)为NULL引发异常的解决方法
devil_pull
博客等级 码龄15年 12粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值