2014-08-30 113 views
-5

您好我是OpenCV和C++的新手。我一直在尋找使用setMouseCallback功能,做到了像這樣:OpenCV mat * image =(mat *)image

setMouseCallback("Window Name", functionName, &frame); 

void functionName("int event, int x, int y, int flag, void* param"){ 
Mat *image = (Mat*)param; 
//other stuff here 
} 

我只想問...爲什麼我必須把(太*)參數,而不是隻把墊* PARAM。

在此先感謝!

+1

什麼是'param'? – juanchopanza 2014-08-30 08:42:39

回答

1

你在這個例子中有一個明確的類型轉換(見例如http://en.cppreference.com/w/cpp/language/explicit_cast)。 param與您的Mat* image類型不同,因此您不能簡單地將指針param指定爲,該指針極有可能與Mat*(請參閱juanchopanza的問題)類型不同。因此,您必須告訴編譯器,即使指針類型不同,底層對象類型也可以被分配到Mat *

您提到的另一件事:Mat *param具有完全不同的含義,這意味着您將創建一個名爲param的新指針Mat

+0

P.S.而你正在使用的類是OpenCV類,它可能對類型轉換感興趣,你的實際問題'(T *)param'和'T * param'是非常通用的c/C++問題,而不是OpenCV特定的 – Erik 2014-08-30 09:37:25