【问题标题】:Convert Mat to IplImage* in OpenCV and C/C++在 OpenCV 和 C/C++ 中将 Mat 转换为 IplImage*
【发布时间】:2011-09-04 19:50:02
【问题描述】:

在我的应用程序中,我有一个 Mat 文件,我想用 cvShowImage 在窗口中显示该文件,该文件定义为:

void cvShowImage( const char* name, const CvArr* image )

现在,问题是如果我直接传递 Mat 图像,它会给我一个错误转换:

cannot convert 'cv::Mat' to 'const CvArr*' for argument '2' to 'void cvShowImage(const char*, const CvArr*)'

我试图在这个论坛中搜索有同样问题的人,我发现了这个 opencv 文档: http://opencv.willowgarage.com/documentation/cpp/c++_cheatsheet.html

但我不明白如何使用它。

谁能给我一个如何将 Mat 图像转换为 IplImage 的示例?

这是我的代码:

Mat file;
Mat hogResultFrame = hogStep(temp2);
file = hogResultFrame;

  cvShowImage(window_title, (const CvArr*)(file));

但它给了我一个错误覆盖。

希望你能帮助我,

非常感谢!

【问题讨论】:

    标签: c++ opencv iplimage


    【解决方案1】:

    试试这个:

    IplImage image = file;
    cvShowImage(window_title, &image);
    

    顺便说一句。也许使用 C++ OpenCV 函数来显示图像真的会更好,它应该更容易,而且您不会担心是否已清理所有分配的内存(最好看看这里的示例代码: http://opencv.willowgarage.com/documentation/cpp/introduction.html)。

    【讨论】:

    • 我也尝试过这个解决方案,但我正在使用 etarion 建议,因为它有点快。
    【解决方案2】:

    您为什么尝试将 C 接口与 C++ 数据类型一起使用?使用 C++ 接口。

    cv::namedWindow(window_title, 1);
    cv::imshow(window_title, file);
    

    【讨论】:

    • 非常感谢!我认为这对我的情况来说是更好的解决方案
    • 甚至,namedWindow 也不是必须的。有些甚至在某些平台上遇到问题。
    • @karlphillip 问题一定是许多教师/教材已经习惯了 IplImage,并且没有关于如何从使用 IplImage 更改为 Mat's 的广为人知的资源。
    • @BarnabasSzabolcs 也许吧。我很高兴我们有 Stackoverflow :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2022-06-25
    相关资源
    最近更新 更多