Почему странно работает функция imread() в opencv 3.1 при работе в Visual Studio 2015? Добрый день. Столкнулся с странной проблемой с функцией imread().
Если мы пишем так:Mat image_source = imread("C://Users//deus//Documents//MEGA//test_radius//Debug//k_image.jpg", CV_LOAD_IMAGE_GRAYSCALE);
То изображение загружается.
если так Mat image_source = imread("k_image.jpg", CV_LOAD_IMAGE_GRAYSCALE);
То не загружается, хотя в доках указано что всё должно грузиться.
Для эксперимента закинул файл в папку Debug, куда компилируется exe и даже в папку проекта. Он не находит изображение k_image.jpg.
После вопроса гуглу проблема не решилась. Там были предложения использовать вместо Debug - Release, эффекта это не дало.
Далее менял "k_image.jpg" на "k_image.jpg.jpg" тоже толку не дало. Смысл в том чтобы он из папки в которой находится .exe брал изображение.

21 Авг 2019 в 06:29
240 +1
0
Ответы
1

Возможно, проблема заключается в неправильно заданном пути к изображению. В данном случае, если вы используете относительный путь к изображению ("k_image.jpg"), то OpenCV будет искать изображение относительно рабочей директории, в которой запускается ваше приложение, а не относительно папки, в которой находится исполняемый файл (.exe).

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

Получить текущую директорию, в которой находится .exe файл:#include <windows.h>
TCHAR szPath[MAX_PATH];
GetModuleFileName(NULL, szPath, MAX_PATH);Извлечь путь к папке из пути к .exe файлу:string exePath = szPath;
string exeDir = exePath.substr(0, exePath.find_last_of("\\"));Добавить к пути к папке исполняемого файла название изображения:Mat image_source = imread(exeDir + "\\k_image.jpg", CV_LOAD_IMAGE_GRAYSCALE);

Это позволит вам загрузить изображение из папки, в которой находится ваш .exe файл. Надеюсь, это поможет вам решить проблему с загрузкой изображения в OpenCV 3.1.

20 Апр 2024 в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир