之前学过的简单绘图方法,例如矩形,椭圆等,今天试着在视频图像中用矩形标注感兴趣区域(ROI)

<----图像篇---->

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace std;
using namespace cv;bool draw;
Mat src;//原始图像
Mat roi;//ROI图像
Point cursor;//初始坐标
Rect rect;//标记ROI的矩形框void onMouse(int event, int x, int y, int flags, void *param)
{  Mat img = src.clone();switch (event)  { //按下鼠标左键,点击鼠标图像时,清除之前ROI图像的显示窗口case CV_EVENT_LBUTTONDOWN:          cvDestroyWindow("ROI");   //存放起始坐标  cursor = Point(x, y);  //初始化起始矩形框  rect = Rect(x, y, 0, 0);  draw = true;  break;  //松开鼠标左键      case CV_EVENT_LBUTTONUP:           if (rect.height > 0 && rect.width > 0)  {  roi = img(Rect(rect.x, rect.y, rect.width, rect.height));  rectangle(img, rect, Scalar(255, 255, 255),2);  namedWindow("SignROI");  imshow("SignROI", img);  //将画过矩形框的图像用原图像还原  src.copyTo(img);  imshow("SrcImage", img);  //显示ROI图像namedWindow("ROI");  imshow("ROI", roi);    waitKey(0);  }  draw = false;  break;  //移动光标case CV_EVENT_MOUSEMOVE:  if (draw){  //用MIN得到左上点作为矩形框的起始坐标,如果不加这个,画矩形时只能向一个方向进行  rect.x = MIN(x, cursor.x);  rect.y = MIN(y, cursor.y);  rect.width = abs(cursor.x - x);  rect.height = abs(cursor.y - y);  //防止矩形区域超出图像的范围  rect &= Rect(0, 0, src.cols, src.rows);  }  break;  }
}  int main()
{src=imread("E://IM_VIDEO//kobe.jpg");if(src.data==0){cout<<"the src image is not built!"<<endl;return -1;}namedWindow("SrcImage");imshow("SrcImage",src);setMouseCallback("SrcImage", onMouse, NULL); waitKey();return 0;
}

运行结果如下:

<---视频篇--->

#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<iostream>
#include<vector>
using namespace cv;
using namespace std;  bool drawing_box = false;
bool gotBox =  false;
Rect box;
Point downPoint;  void mouseRectHandler(int event, int x, int y, int flags, void *param)
{  switch (event)  {  case CV_EVENT_MOUSEMOVE:  if (drawing_box)  {  //鼠标的移动到downPoint的右下角  if( x >=downPoint.x && y >= downPoint.y)  {  box.x = downPoint.x;  box.y = downPoint.y;  box.width = x - downPoint.x;  box.height =  y -  downPoint.y;  }  //鼠标的移动到downPoint的右上角  if( x >= downPoint.x && y <= downPoint.y)  {  box.x =  downPoint.x;  box.y = y;  box.width = x - downPoint.x;  box.height = downPoint.y - y;  }  //鼠标的移动到downPoint的左上角  if( x <= downPoint.x && y <= downPoint.y)  {  box.x = x;  box.y = y;  box.width = downPoint.x - x;  box.height = downPoint.y - y;  }  //鼠标的移动到downPoint的左下角  if( x <= downPoint.x && y >= downPoint.y)  {  box.x = x;  box.y = downPoint.y;  box.width = downPoint.x -x;  box.height = y - downPoint.y;  }  }  break;  case CV_EVENT_LBUTTONDOWN:  drawing_box = true;  //起点  downPoint = Point(x,y);  break;  case CV_EVENT_LBUTTONUP:  //松开鼠标,结束画矩形  drawing_box = false;  gotBox = true;  break;  default:  break;  }
}  int main(int argc,char*argv[])    {        VideoCapture video("E://IM_VIDEO//xxx.mp4"); if( !video.isOpened())    return 0;    Mat frame;       namedWindow("face",1);    setMouseCallback("face",mouseRectHandler,NULL);    //画感兴趣区域   for(;;)    {    video>>frame;  if(!frame.data)  break;  rectangle(frame,box,Scalar(255,255,255),2);//参见绘图介绍  imshow("face",frame);   if(waitKey(50) == 'c')break;    }    return 0;    }    

运行结果如下:

参考:

http://blog.csdn.net/zhangping1987/article/details/51880098

http://blog.csdn.net/qq_23968185/article/details/51335291

opencv图像及视频感兴趣区域设置相关推荐

  1. 提取图像感兴趣区域_从图像中提取感兴趣区域

    提取图像感兴趣区域 Welcome to the second post in this series where we talk about extracting regions of intere ...

  2. ITK:在一幅图像中提取感兴趣区域ROI

    ITK:在一幅图像中提取感兴趣区域ROI 内容提要 输出结果 C++实现代码 内容提要 在给定图像中提取给定的关注区域(ROI) 输出结果 C++实现代码 #include "itkImag ...

  3. 使用 OpenCV 和 Tesseract 对图像中的感兴趣区域 (ROI) 进行 OCR

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,我们将使用 OpenCV 在图像的选定区域上应用 O ...

  4. vs矩形框边框线显示被选中的区域;_如何使用OpenCV可视化的截取感兴趣区域

    OpenCV是一个著名的计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python ...

  5. openCV任意几何形状感兴趣区域(ROI)提取

    图像感兴趣区域(ROI)提取主要使用掩模来进行.掩模是二值图像,感兴趣区域的掩模值设置为255,非感兴趣区域的掩模值为0 获取掩模的方法主要有两种 方法一 使用opencv中Mat函数方法,调用Mat ...

  6. OpenCV实战(3)——图像感兴趣区域

    OpenCV实战(3)--图像感兴趣区域 0. 前言 1. 感兴趣区域 1.1 ROI 实例 1.2 定义 ROI 2. 使用图像掩码 3. 完整代码示例 小结 系列链接 0. 前言 在实际应用场景下 ...

  7. 【QtOpenCV 图像的感兴趣区域ROI】

    图像的ROI(region of interest)是指图像中感兴趣区域.在OpenCV中图像设置图像ROI区域,实现只对ROI区域操作. 文章目录 前言 一.GUI 二.实现代码 1.Rubber ...

  8. OpenCV学习笔记(六)——感兴趣区域ROI(浅拷贝与深拷贝的区别)

    目录 1 浅拷贝 2 深拷贝 示例代码 有时我们只对一张图像中的部分区域感兴趣,而原图像又比较大,如果带着非感兴趣区域一起处理会占用大量的内存,因次我们希望从原图像中截取部分图像后再进行处理.我们将这 ...

  9. matlab如何手动选择图像目标区域,如何用MATLAB实现感兴趣区域ROI的选取

    描述 感兴趣区域 感兴趣区域(Regions of Interest,ROI)这一概念,是指图像中最能引起用户兴趣.最能表现图像内容的区域.感兴趣区域(Regions of Interest,ROI) ...

  10. OpenCV-C++选择、提取感兴趣区域(ROI区域)【附用鼠标选取ROI区域的代码】

    在图像处理中,我们常常要对某个区域进行选择.提取,然后对这个区域进行单独分析.处理.显示. 这样的区域我们称为叫ROI区域,英文全称为Region of interest,中文名为"感兴趣区 ...

最新文章

  1. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、使用HH包中的interaction2wt函数为任何阶的双因素方差分析可视化主效应和交互作用图、箱图显示主效应
  2. 华为nova3android,华为nova3和3i哪个好 华为nova3i和nova3区别对比
  3. Level/levelup-2-API
  4. C#中的OOP相关概念
  5. ARM汇编:乘法指令集
  6. 做java技术天花板在哪里?我突然发现影响你晋升的竟然不是技术!
  7. localStorage的过期时间设置的方法?
  8. Java初始化顺序研究
  9. 哲学家就餐(避免死锁)(多进程版)
  10. 别再用硬编码写业务流程了,试试这款轻量级流程编排框架
  11. loadClass 使用
  12. 【数据蒋堂】报表应用的三层结构
  13. mysql 二进制日志格式_MySQL 二进制日志格式深入理解
  14. intellij idea 创建web 项目
  15. 音视频开发系列(32)OpenGL ES 基本概念
  16. # 解决微信小程序遮罩层底部页面滚动
  17. 电脑监控软件是如何监控员工微信的?
  18. 一、初探Javascript魅力(1)_看智能社blue老师JS视频整理的笔记
  19. head标签中logo图的设置
  20. encodeURI encodeURIComponent 的区别,和使用场景

热门文章

  1. 计算机病毒实践汇总三:动态分析基础(分析程序)
  2. javascript中数组遍历问题
  3. deprecations - 极不赞成的写法
  4. Ajax 读取.ashx 返回404
  5. 为类型库(Type Library)生成帮助文件
  6. 如何使用Java代码获取文件、文件流或字符串的编码方式
  7. Spring MVC请求-响应流
  8. jQuery深拷贝Json对象
  9. 47. 不用加减乘除做加法(C++版本)
  10. 04. 非必要不提供default constructor