2014-08-30 154 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