Почему странно работает функция 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 брал изображение.
Возможно, проблема заключается в неправильно заданном пути к изображению. В данном случае, если вы используете относительный путь к изображению ("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.
Возможно, проблема заключается в неправильно заданном пути к изображению. В данном случае, если вы используете относительный путь к изображению ("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.