2013年1月5日 星期六

期末project,第四組


題目:視訊小畫家
簡介:一般視訊較為乏味,邊視訊邊畫小畫家,可以增添許多趣味性,功能是滑鼠左鍵畫筆,滑鼠右鍵是填滿。
程式碼介紹:

#include<highgui.h>
#include<cv.h>
IplImage * img;
IplImage * frame;
IplImage * combine;
void mymouse(int event, int x, int y, int flag, void* param)//滑鼠事件函式
{
static int oldx, oldy, now_down=0;
if(event==CV_EVENT_RBUTTONDOWN){ //滑鼠右鍵按下
cvFloodFill(img, cvPoint(x,y), cvScalar(0,255,255));
}
if(event==CV_EVENT_LBUTTONDOWN){ //滑鼠左鍵按下
oldx=x;oldy=y;
now_down=1;
}
if(event==CV_EVENT_LBUTTONUP){ //滑鼠左鍵放開
now_down=0;
}
if(event==CV_EVENT_MOUSEMOVE && now_down==1){ //滑鼠移動
cvLine(img, cvPoint(x,y), cvPoint(oldx, oldy), cvScalar(255,255,255), 5);
oldx=x;oldy=y;//line畫線、point抓取滑鼠移動的座標
}
cvAdd(img, frame, combine, NULL);
cvShowImage("小畫家", combine);
cvShowImage("pen", img);
}
int main()
{
CvCapture * cap = cvCreateCameraCapture(0);//抓取視訊
frame = cvQueryFrame(cap);
img = cvCloneImage(frame);//clone(frame)將frame連記憶體一起複製
cvSet(img, cvScalar(0,0,0));
combine = cvCloneImage(img);
cvShowImage("小畫家", combine);
cvSetMouseCallback("小畫家", mymouse);
while(1){
frame = cvQueryFrame(cap);
cvShowImage("frame", frame);
cvAdd(img, frame, combine, NULL);
cvShowImage("小畫家", combine);
int key=cvWaitKey(33);
if(key==27)break;
}
cvReleaseCapture(&cap);
return 0;
}

未來發展:未來可以加上偵測手指可直接使用手指繪畫,畫筆可換顏色、粗細......等,且可以加入文字方塊之類的,這樣就可以變得更有趣




DEMO影片



沒有留言:

張貼留言