2011-11-18 35 views
4

我有一個my_mouse_callback例如函數與IplImage結構*作品:墊和setMouseCallback功能

void my_mouse_callback(int event, int x, int y, int flags, void* param) 
{ 
IplImage* image = (IplImage*) param; 
switch(event) 
{ 
    case CV_EVENT_LBUTTONDOWN: 
     drawing_box = true; 
     box = cvRect(x, y, 0, 0); 
     break; 
     ... 

     draw_box(image, box); 
     break; 
} 

這是在main實現這樣的:

cvSetMouseCallback(Box Example,my_mouse_callback,(void*) image); 

的問題是,在我的代碼我m使用Mat對象,並且不能通過這種方式轉移到setMouseCallback函數。

我正在尋找一種解決方案,不涉及將Mat傳輸到IplImage *。

或者如果沒有解決方案,我該如何正確地將Mat轉換爲IplImage *?

我想,已經與來自OpenCV的文檔驗證碼:

Mat I; 
IplImage* pI = &I.operator IplImage(); 

,並沒有奏效。

回答

3

據我所知,C++接口中有該函數的no equivalent

但是你可以轉換cv::MatIplImage*like this,和周圍的其他方法是這樣的:

cv::Mat mat(my_IplImage); 
+1

泰,你的回答使我的解決方案, 的IplImage * ipl_img =新的IplImage(mat_image);我可以使用: setMouseCallback(imageName,onMouse,(void *)&ipl_img); – notphunny

+0

這就是主意。順便說一下,我的答案附近有一個複選框,您可以點擊它將其選爲您問題的官方答案。祝你好運,並歡迎來到stackoverflow。 – karlphillip

2

爲什麼你不能墊傳輸到MouseCallback功能?你只是用IplImage做的。墊子只是指針。這是我做到的。

void onMouse(int event, int x, int y, int flags, void* param) 
{ 
    Mat src; 
    src = *((Mat*)param); 

    ... 

,並要求它像這樣在我的主循環:

setMouseCallback("source", onMouse, &src);