温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

基于OpenCv中运动物体检测算法的示例分析

发布时间:2021-06-11 14:23:20 来源:亿速云 阅读:310 作者:小新 栏目:编程语言

这篇文章主要为大家展示了“基于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中运动物体检测算法的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI