嗨,我是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 .
提前致谢!
1 回答
此示例中的内容是显式类型转换(请参阅例如http://en.cppreference.com/w/cpp/language/explicit_cast) .
param
与Mat* image
的类型不同,因此您不能简单地指定param
指针,它很可能与Mat*
(请参阅juanchopanza的问题)具有不同的类型image
. 因此,您必须告诉编译器即使指针类型不同,底层对象类型也与分配给Mat *
兼容 .你要提到的另一件事:
Mat *param
有一个完全不同的含义,它意味着你正在创建一个名为param
的新Mat
指针 .