【问题标题】:Mat and setMouseCallback functionMat 和 setMouseCallback 函数
【发布时间】:2016-03-10 06:13:13
【问题描述】:

我有一个与 IplImage* 一起使用的 my_mouse_callback 示例函数:

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

它没有用。

【问题讨论】:

    标签: c++ c opencv iplimage


    【解决方案1】:

    据我所知,C++ 接口中有该函数的no equivalent

    但是您可以将 cv::Mat 转换为 IplImage* like this,反之亦然:

    cv::Mat mat(my_IplImage);
    

    【讨论】:

    • Ty,你的回答让我找到了解决方案,IplImage* ipl_img = new IplImage (mat_image);然后我可以使用: setMouseCallback( imageName, onMouse, (void*) &ipl_img );
    • 就是这个想法。顺便说一句,我的答案附近有一个小复选框,您可以单击它来选择它作为您问题的官方答案。祝你好运,欢迎使用 stackoverflow。
    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2019-04-24
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多