在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. bzoj3163: [Heoi2013]Eden的新背包问题

    Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她 ...

  2. Windows2008 Patching(打补丁)

    我们都知道Windows的服务器都需要打补丁的,要不然漏洞那个叫多啊.Windows的系列服务器打补丁无非就是两种方法: 1. 通过Internet打补丁: Go to control Panel-& ...

  3. android学习笔记九——RatingBar

    RatingBar==>星级评分条 RatingBar和SeekBar十分相似,它们甚至有相同的父类:AbsSeekBar.两者都允许用户通过拖动来改变进度: 两者最大的区别在于RatingBa ...

  4. jQurey基础简介

    随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype.YUI.jQuery. mootools.Bindows以及国内的JSVM框架 ...

  5. (C++) 基本面试题(整理)

    1.new.delete.malloc.free关系 new/delete是C++的运算符.new 调用构造函数用于动态申请内存,delete调用对象的析构函数,用于释放内存. malloc与free ...

  6. MongoDB 3.0 导入命令

    在MongoDB的bin目录下执行 ./mongoimport -h 192.168.77.129 --db test --collection restaurants --drop --file / ...

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

    2014-05-31 Created By BaoXinjian

  8. OC错误

  9. suibi

    测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等. 我所了解的模块接口测试大体分为两类:模块接口测试和web接口测试 模块接口测试是单元测试的基础.它主要测试模块的调用 ...

  10. bug_ _图片_android.view.InflateException: Binary XML file line #1: Error inflating class <unknown>

    =========== 1   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zgan.communit ...