您好我是OpenCV和C ++的新手。我当时想要使用setMouseCallback函数并按原样执行:
setMouseCallback("Window Name", functionName, &frame);
void functionName("int event, int x, int y, int flag, void* param"){
Mat *image = (Mat*)param;
//other stuff here
}
我想问一下......为什么我必须把(Mat *)param而不只是把Mat * param。
提前致谢!
答案 0 :(得分:1)
此示例中的内容是显式类型转换(请参阅例如http://en.cppreference.com/w/cpp/language/explicit_cast)。 param
与Mat* image
的类型不同,因此您不能简单地指定指针param
,它很可能与Mat*
具有不同的类型(请参阅juanchopanza的问题)到image
。因此,您必须告诉编译器即使指针类型不同,底层对象类型也与分配给Mat *
兼容。
您提到的另一件事:Mat *param
具有完全不同的含义,这意味着您正在创建名为Mat
的新param
指针。