当前位置: 首页 > 编程笔记 >

基于OpenCv的运动物体检测算法

贾建茗
2023-03-14
本文向大家介绍基于OpenCv的运动物体检测算法,包括了基于OpenCv的运动物体检测算法的使用技巧和注意事项,需要的朋友参考一下

基于一个实现的基于OpenCv的运动物体检测算法,可以用于检测行人或者其他运动物体。

#include <stdio.h>  
#include <cv.h>  
#include <cxcore.h>  
#include <highgui.h>  
int main( int argc, char** argv )  
  
 //声明IplImage指针  
 IplImage* pFrame = NULL;  
 IplImage* pFrImg = NULL;  
 IplImage* pBkImg = NULL;  
 CvMat* pFrameMat = NULL;  
 CvMat* pFrMat = NULL;  
 CvMat* pBkMat = NULL;  
  
 CvCapture* pCapture = NULL;  
   
 int nFrmNum = 0;  
 //创建窗口   
 cvNamedWindow("video", 1);  
 cvNamedWindow("background",1);  
 cvNamedWindow("foreground",1);  
 //使窗口有序排列  
 cvMoveWindow("video", 30, 0);  
 cvMoveWindow("background", 360, 0);  
 cvMoveWindow("foreground", 690, 0);  
 argc = 1; 
  
 if( argc > 2 )  
  {  
   fprintf(stderr, "Usage: bkgrd [video_file_name]\n");  
   return -1;  
  }  
 //打开摄像头  
 if (argc ==1)  
  if( !(pCapture = cvCaptureFromCAM(-1)))  
   {  
  fprintf(stderr, "Can not open camera.\n");  
  return -2;  
   }  
 //打开视频文件  
 if(argc == 2)  
  if( !(pCapture = cvCaptureFromFile(argv[1])))  
   {  
  fprintf(stderr, "Can not open video file %s\n", argv[1]);  
  return -2;  
   }  
   
 //逐帧读取视频  
 while(pFrame = cvQueryFrame( pCapture ))  
  {  
   nFrmNum++;  
     
   //如果是第一帧,需要申请内存,并初始化  
   if(nFrmNum == 1)  
  {  
   pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);  
   pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);  
   pBkMat  = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);  
   pFrMat  = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);  
   pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);  
   //转化成单通道图像再处理  
   cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);  
   cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);  
   cvConvert(pFrImg, pFrameMat);  
   cvConvert(pFrImg, pFrMat);  
   cvConvert(pFrImg, pBkMat);  
  }  
   else  
  {  
   cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);  
   cvConvert(pFrImg, pFrameMat);  
   //先高斯滤波,以平滑图像  
   //cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0);  
     
   //当前帧跟背景图相减  
   cvAbsDiff(pFrameMat, pBkMat, pFrMat);  
   //二值化前景图  
   cvThreshold(pFrMat, pFrImg, 60, 255.0, CV_THRESH_BINARY);  
   //进行形态学滤波,去掉噪音   
   //cvErode(pFrImg, pFrImg, 0, 1);  
   //cvDilate(pFrImg, pFrImg, 0, 1);  
   //更新背景  
   cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);  
   //将背景转化为图像格式,用以显示  
   cvConvert(pBkMat, pBkImg);  
   //显示图像  
   cvShowImage("video", pFrame);  
   cvShowImage("background", pBkImg);  
   cvShowImage("foreground", pFrImg);  
   //如果有按键事件,则跳出循环  
   //此等待也为cvShowImage函数提供时间完成显示   
   //等待时间可以根据CPU速度调整  
   if( cvWaitKey(2) >= 0 )  
    break;  
  
  }  
  }  
    
 //销毁窗口  
 cvDestroyWindow("video");  
 cvDestroyWindow("background");  
 cvDestroyWindow("foreground");  
 //释放图像和矩阵  
 cvReleaseImage(&pFrImg);  
 cvReleaseImage(&pBkImg);  
 cvReleaseMat(&pFrameMat);  
 cvReleaseMat(&pFrMat);  
 cvReleaseMat(&pBkMat);  
 cvReleaseCapture(&pCapture);  
 return 0;  
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍OpenCV利用背景建模检测运动物体,包括了OpenCV利用背景建模检测运动物体的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV利用背景建模检测运动物体的具体代码,供大家参考,具体内容如下 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍基于Python检测动态物体颜色过程解析,包括了基于Python检测动态物体颜色过程解析的使用技巧和注意事项,需要的朋友参考一下 本篇文章将通过图片对比的方法检查视频中的动态物体,并将其中会动的物体定位用cv2矩形框圈出来。本次项目可用于树莓派或者单片机追踪做一些思路参考。寻找动态物体也可以用来监控是否有人进入房间等等场所的监控。不仅如此,通过对物体的像素值判断分类,达到判断动态物体

  • 本文向大家介绍python opencv 检测移动物体并截图保存实例,包括了python opencv 检测移动物体并截图保存实例的使用技巧和注意事项,需要的朋友参考一下 最近在老家找工作,无奈老家工作真心太少,也没什么面试机会,不过之前面试一家公司,提了一个有意思的需求,检测河面没有有什么船只之类的物体,我当时第一反应是用opencv做识别,不过回家想想,河面相对的东西比较少,画面比较单一,只需

  • 我想用OpenCV fullbody Haar Cascades检测图像中的人体。这是我的代码: 结果如下: 后果 如您所见,我的代码没有检测到图像中的整个人体。 顺便说一句,我是OpenCv的新手,这是我在这里的第一个问题,所以如果我做错了什么,请纠正我,我希望有人能帮助我纠正我的代码。 抱歉英语不好;)。

  • 本文向大家介绍Opencv光流运动物体追踪详解,包括了Opencv光流运动物体追踪详解的使用技巧和注意事项,需要的朋友参考一下 光流的概念是由一个叫Gibson的哥们在1950年提出来的。它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。那么所说的光

  • 我是新的对象检测,我有泰米尔语字符,我成功地做了分类部分使用CNN。 对于对象检测,我遵循以下示例--https://towardsdatascience.com/getting-starting-with-bounding-box-regression-in-tensorflow-743E22D0CCB3 我们必须创建边界框并创建注释文件,其中包含图像中存在的对象的数量以及对象的(Xmin,Ym