OpenCV, Qt, imread, namedWindow, imshow не работают

В файле .pro:

QT       += core

QT       -= gui

TARGET    = latihan_2
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

INCLUDEPATH += E:\OpenCV\OpenCV\opencv\build\include

LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_core246.dll.a
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_highgui246.dll.a
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_imgproc246.dll.a
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_features2d246.dll.a
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\mingw\lib\libopencv_calib3d246.dll.a

In main.cpp:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(){
    //read image
    Mat image = imread("img.jpg", 1);
    //create image window named "My image"
    namedWindow("My Image", CV_WINDOW_AUTOSIZE);
    //show the image on window
    imshow("My image", image);
    //wait key for 5000ms
    waitKey(5000);
    return 1;
    }

Когда я нажимаю «Выполнить», ошибки нет, но отображается только черное окно с именем qtcreator_process_stub.exe.

Почему окно "Мое изображение" не открывается и показывает img.jpg? Я использую Qt Creator 2.8.1 на основе Qt 5.1.1 и openCV-2.4.6.0.


person Squirrelcages    schedule 16.11.2013    source источник
comment
Вы поете готовые бинарники для OpenCV и Qt..?   -  person scap3y    schedule 16.11.2013
comment
да, я использую openCV 2.4.6   -  person Squirrelcages    schedule 16.11.2013
comment
Похоже, что Qt неправильно связан с OpenCV. Я бы посоветовал вам самостоятельно создать библиотеки для Qt и OpenCV. Процесс генерации гарантирует, что все правильно связано.   -  person scap3y    schedule 16.11.2013
comment
@Squirrelcages Просмотрите все ответы и установите флажок рядом с ответом, который помог вам решить проблему. Этим вы поможете себе и будущим посетителям.   -  person karlphillip    schedule 19.12.2013


Ответы (4)


Вы также можете отобразить cv::Mat в окне Qt. Я демонстрирую, как это сделать, на cvImage. Код ниже адаптирован из cvImage::_open():

std::string filename = ...
cv::Mat mat = cv::imread(filename);

// Since OpenCV uses BGR order, we need to convert it to RGB
// NOTE: OpenCV 2.x uses CV_BGR2RGB, OpenCV 3.x uses cv::COLOR_BGR2RGB
cv::cvtColor(mat, mat, cv::COLOR_BGR2RGB) 

// image is created according to Mat dimensions
QImage image(mat.size().width, mat.size().height, QImage::Format_RGB888);

// Copy cv::Mat to QImage
memcpy(image.scanLine(0), mat.data, static_cast<size_t>(image.width() * image.height() * mat.channels()));

// Display the QImage in a QLabel
QLabel label;
label.setPixmap(QPixmap::fromImage(image));
label.show();
person karlphillip    schedule 16.11.2013

Первое предположение состоит в том, что образ находится на неправильном пути, поэтому в первую очередь следует указать полный путь к изображению.

Также проверьте возвращаемое значение вашей программы (убедитесь, что она не возвращает какой-либо код ошибки сбоя - будьте последовательны и возвращайте 0 в случае успеха и другие значения в случае неудачи).

И немного кода, который подскажет вам, где код дает сбой, не помешает, поэтому проверьте image.data или вы также можете использовать image.empty():

if(! image.data )
{
    std::cout << "No image to display";
    //can be any other method to display the error: qDebug, a messagebox... 
    //you can also 
    return 1;   
}
else
{
    //use the image
    //if nothing goes wrong:
    //return 0; 
}
person Zlatomir    schedule 16.11.2013
comment
+1 Я думаю, что imshow() вылетит, если изображение не будет загружено, но это важно, на что вы указываете. - person karlphillip; 16.11.2013
comment
Я попробовал код, но ничего не изменилось.. по-прежнему отображается только окно с именем qtcreator_process_stub.exe с сообщением. Нажмите ‹RETURN›, чтобы закрыть это окно... - person Squirrelcages; 16.11.2013
comment
Если вы используете Qt Creator, проверьте Application Output код возврата вашего приложения и стандартные выходные сообщения (сообщение cout), если вы используете приложение с графическим интерфейсом. - person Zlatomir; 16.11.2013
comment
Вывод приложения: E:\OpenCV\Projects\myQtConsoleProject\build-latihan_2-Desktop_Qt_5_1_1_MinGW_32bit-Debug\debug\latihan_2.exe завершился с кодом 0 - person Squirrelcages; 16.11.2013

Установите флажок «Проекты» -> «Настройки запуска» -> «Запустить в терминале». Если он отключен, включите его.

person old-ufo    schedule 16.11.2013

Я столкнулся с той же проблемой, и я решил ее, исправив переменную среды пути. В моей переменной среды пути я неправильно добавил несколько папок opencv, затем удалил их и добавил только папку bin для DLL opencv, после чего проблема была решена.

person tkarahan    schedule 24.01.2019