2011-05-13 95 views
1

我一直試圖在VS2010中使用OpenCV做一些工作,特別是在鼠標處理領域。到目前爲止,我有這樣的:「點發現0,0」鼠標處理:打印像素位置

CV_EVENT_LBUTTONDOWN 
     :drawing_line = true; 
     cvLine(frame, cvPoint(x,y),cvPoint(350,500), CV_RGB(255,0,0), CV_AA, 15,0); 
     fprintf(stdout, "Point found. %i, %i \n", object_x0, object_y0); 
     break; 

我希望它做的是回到我點擊的像素的位置,但所有返回的,而不是實際位置。最後,我想用cvLine繪製一條線,但現在我只想返回一些值。任何建議將不勝感激。謝謝!

+0

是什麼'object_x0'和'object_y0'? – Andrey 2011-05-13 06:53:07

+0

請參閱'OpenCV2.2 \ samples \ cpp \ camshiftdemo.cpp' – Andrey 2011-05-13 06:54:37

回答

0

點作爲參數傳遞給Mouse回調函數。

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

你會想爲y保存這些X,成爲一個全球性,當你點擊了下來,然後一個不同的世界,當你點擊了,然後繪製兩者之間的線路。

2

你可以把它當作參數傳遞給鼠標回調函數,像這樣得到一個鼠標點擊的位置:

void onMouse(int evt, int x, int y, int flags, void* param) { 
    if(evt == CV_EVENT_LBUTTONDOWN) { 
     cv::Point* ptPtr = (cv::Point*)param; 
     ptPtr->x = x; 
     ptPtr->y = y; 
    } 
} 

int main() { 
    cv::Point2i pt(-1,-1); 
    cv::namedWindow("Output Window"); 
    frame = cv::imread("image.jpg"); 
    cv::imshow(winName, frame); 

    cv::setMouseCallback(winName, onMouse, (void*)&pt); 
    // Note that we passed '&pt' (a pointer 
    // to `pt`) to the mouse callback function. 
    // Therefore `pt` will update its [x,y] coordinates 
    // whenever user left-clicks on the image in "Output Window". 
} 
+0

感謝您的代碼示例,但我們怎樣才能看到鼠標點擊的位置? – user8663682 2018-01-02 06:02:56