在OpenCV中,普遍支持ROI和widthStep,函数的操作被限制于感兴趣的区域,要设置或者取消ROI,就要使用cvSetImageROI()和cvResetImage()函数.如过想设置ROI,可以使用函数cvSetImageROI(),并为其传递一个图像指针和矩形.而取消ROI,只需要为函数cvResetImageROI()传递一个图像指针

void  cvSetImageROI( IplImage* image, CvRect rect );

void  cvResetImageROI( IplImage* image );

如例3.12,读取一幅图像,并设置了想要的ROI的x,y,width,和height的值,最后将ROI区域都加上了一个整数,本例程中,通过内联的cvRrect()构造函数设置ROI.通过cvResetIMageROI()函数释放ROI是非常重要的,否则将忠实的显示ROI区域

  1. //例3.12 用imageROI来增加某范围的像素
  2. #include "stdafx.h"
  3. #include <cv.h>
  4. #include <highgui.h>
  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7. IplImage* src;
  8. src = cvLoadImage("C:/Users/Administrator/Desktop/lena.bmp");
  9. if (src != nullptr)
  10. {
  11. int x = 20;
  12. int y = 20;
  13. int width = 150;
  14. int height = 150;
  15. int add = 150;
  16. cvSetImageROI(src,cvRect(x,y,width,height));
  17. cvAddS(src,cvScalar(add),src);
  18. cvResetImageROI(src);
  19. cvNamedWindow("ROI_add",1);
  20. cvShowImage("ROI_add",src);
  21. cvWaitKey();
  22. }
  23. return 0;
  24. }

通过巧妙地使用widthStep,我们可以打到同样的效果.要做到这一点,我们创建了另一个图像头,让他的width和height的值等于interest_rect的width和height的值.我们还需要按interest_rect 起点设置图像起点(左上角或者左下角),下一步,设置子图像的widthStep与较大的interest_img相同.这样,即可在子图像中逐步步进到大图像里子区域中下一行开始处的合适位置.最后设置子图像的imageData指针指向兴趣子区域的开始,如下例所示

  1. IplImage *interest_img;
  2. CvRect interest_rect;
  3. IplImage* sub_img = cvCreateImageHeader(cvSize(interest_rect.width,interest_rect.height),
  4. interest_img->depth,interest_img->nChannels);
  5. sub_img->origin = interest_img->origin;
  6. sub_img->widthStep = interest_img->widthStep;
  7. sub_img->imageData = interest_img->imageData +
  8. interest_rect.y * interest_img->widthStep +
  9. interest_rect.x * interest_img->nChannels;
  10. cvAddS(sub_img,cvScalar(1),sub_img);
  11. cvReleaseImageHeader(&sub_img);

看起来设置和重置ROI更方便一些,为什么还要使用widthStep? 原因是有些时候在处理的过程中,想在操作过程中设置和保持一副图像的多个子区域处于活动状态,但是ROI只能串行处理并且必须不断的设置和重置.

掩码和模版, 在代码示例中cvAddS()函数允许第四个参数默认值为空:const CvArr* mask = NULL.这是一个8位单通道数组,它允许把操作限制到任意形状的非0像素和掩码区,如果ROI随着掩码或者模版变化,进程将会被限制在ROI和掩码的交集区域.掩码或者模版只能在指定了其图像的函数中使用.

opencv学习——兴趣区选取的更多相关文章

  1. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  2. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  3. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  4. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  5. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  6. OpenCV学习笔记之课后习题练习3-5

    OpenCV学习笔记之课后习题练习2-5 练习使用感兴趣区域(ROI).创建一个210*210的单通道图像并将其归0.在图像中使用ROI和cvSet()建立一个增长如金字塔状的数组. 参考博文:www ...

  7. OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建

    # OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...

  8. opencv学习笔记D01

    目录 opencv学习笔记D01 一.图片读取 二.图片保存 三.图片展示 四.图片缩放 五.四种常用插值方式的比较 1.最近邻插值 2.双线性插值 3.区域插值 4.三次样条插值 我是尾巴: ope ...

  9. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

随机推荐

  1. lwip:网络数据包读取和解析过程

    1. 程序的某处(poll or interrupt)在有数据可读时调用ethernetif_input,该函数依次调用以下函数: 1.1 low_level_input(),将网络数据读入内存: 1 ...

  2. Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  3. Cacti不显示图片(nan)

    1.发现多半是SNMP的配置问题 被监控端安装snmp yum -y install net-snmp net-snmp-devel 被监控端安装配置snmp vim /etc/snmp/snmpd. ...

  4. HAML学习

    来源:http://ningandjiao.iteye.com/blog/1772845 一个技术能够风靡,一定是有它的原因的,在熟悉之前,我们没有资格去对它做任何的判断. Haml 是一种简洁优美的 ...

  5. 【Android学习日记】

    (一) Android 开发基础 1 Android平台的特性 1)  应用程序框架支持组建的重用和替换,包括打电话应用程序.文件管理器等. 2)  Dalvik虚拟机专门为移动设备做了优化,Dalv ...

  6. Env:Cscope安装与配置

    1. 介绍 Cscope是类似于ctags一样的工具,但可认为他是ctags的增强版. 2. 安装 sudo apt-get install cscope 通过源码安装,参照http://blog.c ...

  7. PLSQL_长脚本如何判断需耗时多久v.sql / v.sqltext / v.sqlarea / v.sql_plan及nohup(案例)

    2014-08-27 Created By BaoXinjian

  8. Report_客制化以PLSQL输出HTML标记实现WEB报表(案例)

    2014-05-31 Created By BaoXinjian

  9. Linq常用操作

    http://www.cnblogs.com/knowledgesea/p/3897665.html

  10. activity属性_ _activity 属性说明

    activity是android中使用非常平凡的一种组件,我们除了需要掌握activity中的生命周期以外,还需要掌握activity中的其 他设置. 1.activity 中主题的设置   andr ...