【问题标题】:crash without error message opencv under Qt在Qt下没有错误消息opencv崩溃
【发布时间】:2014-06-07 15:25:12
【问题描述】:

我在Qt下有问题,其实我想在它(ubuntu)下使用opencv,出现crash。 如果我在终端下编译:

g++ pkg-config --cflags opencvexample.cc -o output_file pkg-config --libs opencv

一切都好,但是在 QT 下有一个崩溃的问题,我刚刚看到这个消息错误:

正在启动/home/quentin/build-test_opencv-Desktop_Qt_5_2_1_GCC_64bit-Release/test_opencv... 程序意外结束。 /home/quentin/build-test_opencv-Desktop_Qt_5_2_1_GCC_64bit-Release/test_opencv 崩溃

这是我的 .pro :

QT       += core

QT       -= gui

TARGET = test_opencv
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

CONFIG += link_pkgconfig
PKGCONFIG += opencv

SOURCES += main.cpp

INCLUDEPATH += -I /usr/local/include/opencv

LIBS += `pkg-config opencv --libs`

这是我的 main.cpp :

#include <QCoreApplication>
#include <iostream>
#include "cv.h"
#include "highgui.h"

using namespace std;

int main(int argc, char *argv[])
{

    IplImage* img = cvLoadImage( "lena.png" ); 

    cout << "Image WIDTH  = " << img->width << endl;
    cout << "Image HEIGHT  = " << img->height << endl;
    cvReleaseImage( &img );
    return 0;


} 

【问题讨论】:

  • 添加到您的代码中,在 cvLoadImage("lena.png"):assert(img != NULL) 之后,您需要包含 &lt;cassert&gt;
  • 因为你是新手,-请使用 opencv 的 c++ api,避免使用 IplImages、cv* 函数等。只是不要开始学习已弃用的 api。
  • 请注意,`LIBS += pkg-config opencv --libs` 是不必要的,因为您在执行 CONFIG += link_pkgconfig PKGCONFIG += opencv 时已经链接到 opencv

标签: c++ qt opencv terminal


【解决方案1】:

很可能cvLoadImage 失败并返回nullptr。你永远不会费心去检查。

【讨论】:

    【解决方案2】:

    您使用什么版本的 openCV? berak 的意思是 IplImage 未在较新版本的 openCV 中使用。使用 Mat 而不是 IplImage。试试这段代码,告诉我会发生什么:

    #include <QCoreApplication>
    #include <iostream>
    #include <stdio.h>
    #include <opencv2/core/core.hpp>
    #include "opencv2/highgui/highgui.hpp"
    
    int main(int argc, char *argv[])
    {
        Mat* img = new cv::Mat(cv::imread("lena.png",CV_LOAD_IMAGE_COLOR)); 
    
        if(img == NULL){
            perror("Could not load image");
        }
    
        std::cout << "Image WIDTH  = " << img->cols << std::endl;
        std::cout << "Image HEIGHT  = " << img->rows << std::endl;
        img->release();
        return 0;
    } 
    

    这将在 opencv 2.4.X 中工作。还要确保您的图像与您的程序位于同一文件夹中。请告诉我任何错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多