【问题标题】:OpenCV with Qt functions cv::erode() and cv::dilate () crash带有 Qt 函数 cv::erode() 和 cv::dilate() 的 OpenCV 崩溃
【发布时间】:2012-08-23 20:00:31
【问题描述】:
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <QDebug>

int main()
{
    // Read input image
    cv::Mat img= cv::imread("D:\\extra\\Procesare de imagine\\altele\\images\\group.jpg");
    if (!img.data)
    {
        qDebug("no image");
        return 0;

    }

    // Display the image
    cv::namedWindow("Image");
    cv::imshow("Image",img);

    // Erode the image
    cv::Mat eroded;
    cv::erode(img,eroded,cv::Mat());


    cv::waitKey();
    return 0;
}

您好,我在使用 opencv(Qt 中)函数 erode() 和 dilate() 时遇到以下问题。我使用 msvc10 编译器。我尝试运行一个简单的代码,但是在 cv::erode(img,eroded,cv::Mat()) 行它崩溃了。我没有收到任何错误消息,只是出现“program.exe 已停止工作”的对话框。我转到“调试程序”并得到调用堆栈 tbb.dll([下面的帧可能不正确和/或丢失,没有为 tbb.dll 加载符号]: )。我提到从一开始我就遇到了在调试模式下构建的问题(imread 在调试中不起作用,只有 cvLoadImage),并且函数 cv::threshold() 以同样的方式崩溃,代码非常简单。 我读到可以通过将 tbb.pdb 复制到 tbb.dll 旁边来解决,但它不起作用。

【问题讨论】:

  • 在我看来,您包含错误的库文件。检查您是否正在使用调试版本的 lib/dll 文件。我不确定 Qt 库文件,但区别主要是 opencv_core230.libopencv_core230d.lib。后者是调试版本,如果您使用发布版本,它可能会使您的程序崩溃。
  • 在我的 .pro 文件中,我包含了两个版本的 lib 文件。但只有 cv::imread() 在调试中不起作用。 cv::erode() 和 cv::dilate() 在调试和发布模式下都会崩溃。
  • 其他你可能会检查的事情,当你在调试模式下进入 tbb.dll 时,一定有问题,因为你应该使用 tbb_debug.dll,检查你是否正确分离了 debug/release 库.pro 文件中的文件,如 here 所述。

标签: qt image-processing opencv


【解决方案1】:

只是为了补充 Kamyar 的评论:

如果您在调试配置中进行编译,您可能还必须使用名为 tbb_debug.dll 的 tbb 调试版本。对于适用于 Windows 的 OpenCV 2.4.1,可以在 build\common\tbb 下的 OpenCV 目录中找到它。

【讨论】:

  • 我将 tbb_debug.dll 放在 tbb.dll 旁边,我得到了相同的结果。我只在 Qt 中遇到问题,在 Visual Studio 中一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 2017-10-22
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多