C ++ Eclipse OpenCV: .exe файл и двоичные файлы созданы, но изображение не отображается - PullRequest
1 голос
/ 06 января 2012

Вот мой код (первый код DisplayImage.cpp в документации OpenCV)

/*
 * DisplayImage.cpp
 *
 *  Created on: Dec 25, 2011
 *      Author: Arcturus */       
 #include <iostream>    
 #include <opencv2\opencv.hpp>

using namespace cv;

using namespace std;

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

    Mat image;

    image = imread(argv[1], 1);

    if(argc!=2 || !image.data){

        cout<<"no image data";

        return -1;
    }

    namedWindow("Display Image", CV_WINDOW_AUTOSIZE);

    imshow("Display Image", image);

    waitKey(10000);

    return 0;
}

Сборка завершена, исполняемый файл сгенерирован, сгенерированы двоичные файлы.

У меня есть изображение - blackbuck.bmp - в папке отладки DisplayImage. Чтобы запустить код, я иду в Run> Run Configurations. Выберите exe-файл отладки DisplayImage, введите blackbuck.bmp (также пробовал с абсолютным путем) и запустите его.

В верхней части консоли появляется сообщение: DisplayImage Debug. И это не отображает изображение вообще. Что здесь может быть не так?

Я запускаю его на Eclipse, используя CDT.

Спасибо за ваше время!

РЕДАКТИРОВАТЬ: Проблема решена !!! Мне пришлось скопировать все файлы DLL из папки библиотеки в папку, в которой генерируется мой исполняемый файл. Я до сих пор не понимаю, почему, хотя. В конце концов, компоновщик уже связывал папку библиотеки, содержащую все библиотеки DLL. Если бы кто-то мог объяснить это, это было бы очень полезно для будущей отладки. Спасибо, Карл и Мевотрон, за ваше время :)

РЕДАКТИРОВАТЬ 2: С веб-сайта MSDN: «Потенциальным недостатком использования DLL является то, что приложение не является автономным; оно зависит от существования отдельного модуля DLL. Система завершает процессы, используя динамическое связывание во время загрузки, если им требуется DLL, которая не обнаруживается при запуске процесса и выдает сообщение об ошибке пользователю. Система не завершает процесс, используя динамическое связывание во время выполнения в этой ситуации, но функции, экспортируемые отсутствующей DLL, недоступны программе. "

Я думаю, что это отвечает на мой вопрос. Возможно, это означает, что eclipse использует динамическое связывание во время загрузки.

1 Ответ

0 голосов
/ 06 января 2012

Как вы скомпилировали OpenCV с MinGW (то есть, какие параметры BUILD_TYPE и SSE* были заданы во время настройки CMake)?Причина, по которой я спрашиваю, состоит в том, что существует известная ошибка с оптимизацией SSE, которая приводит к сбою операций highgui при использовании встроенных версий MinGW.Смотрите мой другой SO ответ здесь .

...