基於OpenCv的運動物體檢測演算法,opencv物體演算法

來源:互聯網
上載者:User

基於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;   }


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.