4

我有一个my_mouse_callback适用于 IplImage* 的示例函数:

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);

问题是,在我的代码中,我使用的是 Mat 对象,它不能以这种方式转移到setMouseCallback函数中。

我正在寻找不涉及将 Mat 转移到 IplImage* 的解决方案。

或者如果没有解决方案,我怎样才能正确地将 Mat 转换为 IplImage*?

我已经使用 opencv 文档中的这段代码进行了尝试:

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

它没有用。

4

2 回答 2

3

据我所知,C++ 接口中没有等效的函数

但是您可以将 a 转换cv::MatIplImage* like this,反之亦然:

cv::Mat mat(my_IplImage);
于 2011-11-19T02:31:32.647 回答
2

为什么不能将 Mat 转移到 MouseCallback 函数?您只是使用 IplImage 完成的。垫子只是指针。这就是我的做法。

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

   ...

并在我的主循环中这样称呼它:

 setMouseCallback("source", onMouse, &src);
于 2012-12-20T00:15:32.963 回答