2013-08-27 37 views
0

我想在视频暂停时使用鼠标绘制视频区域,但我遇到了一些问题。当我暂停视频并尝试绘制一个区域时,只有在按下键盘上的任何按键(未实现该按键)后才会出现绘制区域。我想知道当我按下鼠标按钮时,可以对绘制区域做什么?使用鼠标在OpenCV上绘制视频区域

谢谢:)

我的代码:

//mouse callback 
void rotina_mouse(int event, int x, int y, int flags, void* param); 
bool continua = false; 

//function to paint 
void pinta(IplImage* image, int x, int y){ 
    cvFloodFill (image, cvPoint (x,y), cvScalar(103), cvScalarAll(2), cvScalarAll(2), 0, CV_FLOODFILL_FIXED_RANGE , 0); 
} 

//main program 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    cvNamedWindow ("saida", CV_WINDOW_AUTOSIZE); 
    CvCapture* g_capture = cvCreateFileCapture ("vid.avi"); 
    IplImage* frame = cvQueryFrame(g_capture); 
    IplImage* temp = cvCloneImage(frame); 
    cvSetMouseCallback("saida",rotina_mouse,(void*) frame); 

    while(1){ 

     frame = cvQueryFrame(g_capture);  
     cvNot(frame, frame); 
     cvCopyImage(frame, temp); 
     cvShowImage("saida", temp); 

     if(!frame) break; 

     //pause with 'p' 
     char e = cvWaitKey(33); 
     if(e==112){ 

     while(1){ 
      cvCopyImage(frame, temp); 
      cvShowImage("saida", temp); 
      char d = cvWaitKey(0); 
      if(d==112) break; 
     } 
     } 

     //close video with'esc' 
     if(e==27) break; 
    } 

    cvReleaseCapture (&g_capture); 
    cvDestroyWindow("saida"); 

    return 0; 
} 

//mouse callback 
void rotina_mouse(int event, int x, int y, int flags, void* param) { 
    IplImage* image = (IplImage*) param; 
     switch(event) { 
      case CV_EVENT_MOUSEMOVE: { 
        if(continua==true) 
        pinta(image, x, y);   
      } 
      break; 
      case CV_EVENT_LBUTTONDOWN: { 
       pinta(image, x, y); 
       continua=true; 
      } 
      break; 
      case CV_EVENT_LBUTTONUP: { 
       continua=false; 
      } 
      break; 
      default: 
      break; 
     } 
} 

回答

0

呼叫CV :: imshow(从回调内部)。

+0

它的工作原理! = DD非常感谢你! –

相关问题