00 GUI介面的製作-"cvcam.h"視訊函式庫(2)

Post date: 2012/4/10 上午 09:15:39

接著是另外一個實作,把它嵌入在OpenCV的GUI上,這邊利用到cvGetWindowHandle()來做嵌入,當然,必須要用到cvNamedWindow()啦,再從cvGetWindowHandle()取得它的Handle,以下程式碼

cvcam.h使用OpenCV視窗介面播放視訊

#include <cvcam.h>

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

#include <windows.h>

void CaptureCallback(IplImage *image);

void onMouse(int Event,int x,int y,int flags,void *param);

void onTrackbar(int position);

int TrackbarInitValue=20;

int TrackbarPosition=20;

int main()

{

cvcamGetCamerasCount();

HWND CaptureWindow;

cvNamedWindow("Webcam",0);

CaptureWindow =(HWND)cvGetWindowHandle("Webcam");

cvcamSetProperty(0,CVCAM_PROP_ENABLE,CVCAMTRUE);

cvcamSetProperty(0,CVCAM_PROP_RENDER,CVCAMTRUE);

cvcamSetProperty(0,CVCAM_PROP_WINDOW,&CaptureWindow);

cvSetMouseCallback("Webcam",onMouse,NULL);

cvCreateTrackbar("Change","Webcam",&TrackbarInitValue,255,onTrackbar);

cvcamSetProperty(0,CVCAM_PROP_CALLBACK,(void *)&CaptureCallback);

cvcamInit();

cvcamStart();

cvWaitKey(0);

cvcamStop();

cvcamExit();

}

void CaptureCallback(IplImage *frame)

{

int i,j;

for(i=0;i<frame->height;i+=TrackbarPosition)

{

for(j=0;j<frame->widthStep;j+=frame->nChannels)

{

frame->imageData[i*j] =0;

frame->imageData[i*j+1]=0;

frame->imageData[i*j+2]=255;

}

}

}

void onMouse(int Event,int x,int y,int flags,void* param )

{

printf("0");

if(Event==CV_EVENT_LBUTTONDOWN)

{

cvcamPause();

printf("1");

}

else if(Event==CV_EVENT_RBUTTONDOWN)

{

cvcamResume();

printf("2");

}

}

void onTrackbar(int position)

{

TrackbarPosition=position;

}

執行結果:

很遺憾,OpenCV視窗程式沒有提供Button的功能,要不然cvcamStart(),cvcamPause(),cvcamResume(),cvcamStop()等可以做到如Real Player播放器一樣,上面的程式碼,除了把之前不必要的屬性刪除加入了滑鼠事件及Trackbar(),滑鼠事件的設計,當按左鍵就暫停,按右鍵就繼續,Trackbar()則修改了for迴圈的規則.

cvcamPause()

暫停視訊

cvcamResume()

從暫停中重新啟動

--

附註:Opencv1.0 only,如果opencv 1.1想要使用的話,可以到sourceforge的opencv網站上下載