OpenCV imread (имя файла) не работает в режиме отладки при использовании библиотек релизов - PullRequest
21 голосов
/ 03 февраля 2012

У меня есть код C ++ , и все работало нормально с OpenCV , кроме функции imread(file).Он правильно находил файл и загружал имя, но не загружал никаких данных.

Mat pattImage = imread(fileName, 0);

После некоторого повторного поиска в Интернете я понял, что нахожусь в режиме отладки, но с выпуском Библиотеки OpenCV вместо отладочных.

debug library:    opencv_core231d.lib
release library:  opencv_core231.lib

Хотя это типичная глупая ошибка, я думал, что это не должно иметь ничего общего, библиотеки отладки должны разрешать отладку кода OpenCV , в то время как библиотеки выпуска позволяют быстрее выполнятькода, но я не понимаю, почему imread не работал.

Кто-нибудь может объяснить мне разницу между debug и выпуском библиотек в OpenCV а почему возникает эта ошибка?

Это ошибка OpenCV ?

Ответы [ 5 ]

26 голосов
/ 03 февраля 2012

Я никогда не устану рассказывать людям, что интерфейс C ++ OpenCV для Windows содержит самые странные ошибки .

Напишите небольшой тест с использованием интерфейса C, чтобы проверить, работает он или нет (cvLoadImage() и т. Д.).

Обновление : теперь, когда вы знаете, что интерфейс C работает должным образом, вы можете либо перейти к списку рассылки и сообщить об этой ошибке, либо сами покопаться в коде, чтобы выяснить, почему он не работает.

8 голосов
/ 23 июля 2014

В режиме выпуска вы должны использовать библиотеки выпуска, в режиме отладки - библиотеки отладки. Это не ошибка.

2 голосов
/ 07 ноября 2012

У этой проблемы была проблема с использованием Qt (Qt Creator), которая была исправлена ​​с помощью ссылки на отладочную версию соответствующей библиотеки. Это можно сделать автоматически в файле конфигурации проекта (.pro):

Файл QTCreator .pro: Настройка пути LIBS в зависимости от DEBUG / RELEASE

1 голос
/ 22 марта 2019

Как правило, совершенно законно связывать исполняемую конфигурацию «Debug» с библиотекой конфигурации «Release» (почему не должно быть так, чтобы символы, экспортируемые библиотеками, были одинаковыми в Debug и в Release?). Если (по некоторым причинам) вы не хотите, чтобы это «смешивание» происходило. Оказывается, разработчики opencv решили не разрешать такое микширование, и они выполняют такие вероятности с определенной частью кода (то, что вы можете найти в файле cvdef.h в выпуске 3.4.4, строка 54). Это не ошибка интерфейса C ++, а "требуемое" поведение. Вы можете найти больше информации на https://github.com/opencv/opencv/pull/9161, где это изменение было задокументировано.

1 голос
/ 08 октября 2017

Используйте косую черту (/) вместо обратной косой черты ().Даже в Windows!

Неверно:

cv::imread("C:\example\1.jpg");

Исправлено:

cv::imread("C:/example/1.jpg");
...