2014-07-25 1 views
0

openCV의 setmousecallback() 함수를 사용하여 사용자가 마우스 오른쪽 버튼을 클릭하자마자 while 루프 (웹캠 비디오 프레임)에서 벗어납니다. 그러나 프로그램이 멈추는 중입니다. 누군가가 아래 마우스 이벤트를 사용하여 setmousecallback을 사용하여 opencv에서 루프를 내보내는 방법

내가 사용하고있는 코드입니다 .. 제발 도움이 될 수 있습니다,

//mouse callback funtion 
void getMouseLoc(int event, int xCor, int yCor, int flags, void* userInput) 
{ 
Point3_<int> *mouseInputs = (Point3_<int>*)userInput; 
mouseInputs->x= xCor; 
mouseInputs->y = yCor; 
mouseInputs->z = event; 
} 

// for loop 
for(; ;) 
{ 
camera >> frame; 
imshow("averageFrame", aver`enter code here`ageFrame); 
setMouseCallback("averageFrame", getMouseLoc, &mouseInputs); 
if(mouseInputs.z == EVENT_RBUTTONDOWN) 
{ 
cout << "topmost cordinates of ROI selected by user" << endl; 
count << mouseInputs.x << " and " << mouseInputs.y << endl; 
break; 
} 
} 
+0

덕분에 네르 코드를 포맷합니다 .. – Bhupendra

답변

1
//mouse callback function 
void getMouseLoc(int event, int xCor, int yCor, int flags, void* userInput) 
{ 
    Point3_<int> *mouseInputs = (Point3_<int>*)userInput; 
    mouseInputs->x= xCor; 
    mouseInputs->y = yCor; 
    mouseInputs->z = event; 
} 

// this does not have to be inside the loop, once is enough:   
Point3_<int> mouseInputs; 
setMouseCallback("averageFrame", getMouseLoc, &mouseInputs); 

// for loop 
for(; ;) 
{ 
    camera >> frame; 
    imshow("averageFrame", aver`enter code here`ageFrame); 

    // you're missing a call to waitKey(), else your image won't get updated !! 
    int k = waitKey(40); 
    if (k == 27) break; // esc pressed. 

    if(mouseInputs.z == EVENT_RBUTTONDOWN) 
    { 
     cout << "topmost cordinates of ROI selected by user" << endl; 
     count << mouseInputs.x << " and " << mouseInputs.y << endl; 
     break; 
    } 
} 
+0

는 지금 작업 어떤 컴파일 오류가 저를 용서하시기 바랍니다 .. 감사합니다 많은 Berak .. – Bhupendra

+0

btw, 당신은 당신의 두 번째 포인트가 첫 번째 클릭 포인트의 아래/오른쪽임을 확인하고 싶습니다. 그렇지 않으면 무효 ROI를 얻게됩니다 – berak

+0

실제로 클릭하면 ROI의 중심이됩니다. 한 가지는 왜 이미지를 업데이 트하는 데 waitKey() 호출이 필요합니다 .. 짧은 설명도 할 것입니다 .. 감사합니다 Logged – Bhupendra

관련 문제