1.0.x-學習Opencv與MFC混合編程之---視頻運動檢測
源代碼地址: http://download.csdn.net/detail/nuptboyzhb/3961668
版本1.0.x新增內容
視頻運動檢測
Ø 新建菜單項,Learning OpenCV——> OpenCVr入門——>視頻運動檢測
Ø 菜單項設置如下:
Ø 建立類向導
Ø 編輯代碼
voidCCVMFCView::OnMyTestSport()
{
// TODO: Add your command handler codehere
//Alt+F8 整理代碼
CvCapture* capture;
capture = cvCreateCameraCapture(0);//打開攝像頭
if(capture==NULL)
{
MessageBox("未檢測到攝像頭,請檢查攝像頭安裝是否正確");
}
else
{
CString WindowName1="攝像機";
IplImage *frame1 = 0;//第一幀
IplImage *frame2 = 0;//第二幀
IplImage *frame_sub= 0;//相減之后的幀
IplImage* pImg8u = NULL;//灰度圖
//
assert(capture != NULL );//如果沒有打開,中斷
cvNamedWindow(WindowName1,CV_WINDOW_AUTOSIZE);
frame1= cvQueryFrame(capture);
frame_sub=cvCloneImage(frame1);
while(1)
{
frame2=cvQueryFrame(capture);
if(!frame2)
{
break;
}
cvAbsDiff(frame1,frame2,frame_sub);
frame1=cvCloneImage(frame2);
cvMoveWindow(WindowName1, 150, 200);
cvShowImage(WindowName1,frame_sub);
// 建立位圖
pImg8u =cvCreateImage(cvGetSize(frame_sub),IPL_DEPTH_8U,1);
cvCvtColor(frame_sub,pImg8u,CV_BGR2GRAY); //彩色變灰階
//--------------一下是計算直方圖-----------------------------
IplImage *src;
IplImage *histimg = 0;
CvHistogram *hist = 0;
int hdims = 256; // 劃分HIST的個數,越高越精確
src=cvCloneImage(pImg8u);
float hranges_arr[] ={0,255};
float* hranges =hranges_arr;
int bin_w;
float max_val;
int i;
cvNamedWindow("Histogram", 0 );
hist = cvCreateHist( 1,&hdims, CV_HIST_ARRAY, &hranges, 1 ); // 計算直方圖
histimg= cvCreateImage( cvSize(320,200), 8, 3 );
cvZero( histimg );
cvCalcHist( &src, hist,0, 0 ); // 計算直方圖
cvGetMinMaxHistValue( hist,0, &max_val, 0, 0 ); // 只找最大值
cvConvertScale(hist->bins, hist->bins,
max_val ? 255. /max_val : 0., 0 ); // 縮放 bin 到區間 [0,255]
cvZero( histimg );
bin_w = histimg->width /hdims; // hdims: 條的個數,則 bin_w 為條的寬度
// 畫直方圖
for( i = 0; i < hdims;i++ )
{
double val = (cvGetReal1D(hist->bins,i)*histimg->height/255 );
CvScalar color =CV_RGB(255,255,0); //(hsv2rgb(i*180.f/hdims);
cvRectangle(histimg, cvPoint(i*bin_w,histimg->height),
cvPoint((i+1)*bin_w,(int)(histimg->height- val)),
color, 1, 8,0 );
}
cvMoveWindow("Histogram",550, 200);
cvShowImage( "Histogram",histimg );
//------------------------------------------------------
char c = cvWaitKey(1);
if( c == 27 )
{
break;
}
}
cvReleaseCapture( &capture );
cvDestroyWindow(WindowName1);
cvDestroyWindow("Histogram");
}
}
from:http://blog.csdn.net/nupt123456789/article/details/7100114
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成