日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/8/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA物体运动检测_基于OpenCv的运动物体检测算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#include

#include

#include

#include

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;

}

總結

以上是生活随笔為你收集整理的JAVA物体运动检测_基于OpenCv的运动物体检测算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。