Почему OpenCV отклоняет cvLoadImage (& # 8220; string.ext & # 8221;), но принимает cvLoadImage (argv [1])?
-
22-07-2019 - |
Вопрос
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
int main(int argc, char* argv[]){
cvNamedWindow("Window1", CV_WINDOW_AUTOSIZE);
IplImage* image = 0;
->->image = cvLoadImage(argv[1]);<-<-
if(!image) printf("Unable to load image!");
cvShowImage("Window1", image);
char c = cvWaitKey(0);
cvReleaseImage(&image);
cvDestroyWindow("Window1");
return 0;
}
Если я заменю указанную строку на cvLoadImage (" 247.png ")
, я получу пустое окно, и изображение останется равным нулю
Если я запускаю exe-файл и даю ему 247.png в качестве аргумента, это просто денди. Если я поставлю " 247.png " прямо в код, а затем собрать и запустить его Visual Studio 2008, он не работает. Если я собираю и запускаю из командной строки, это работает.
Почему это? Я немного устал от движения вперед без срыва.
Решение
В разделе Project -> Properties -> Configuration Properties - > Отладка есть поле " Рабочий каталог " ;. Установите это в каталог, в котором вы хотите выполнить, и это должно решить проблему.
Другие советы
Вы уверены, что " 247.png " находится в текущем рабочем каталоге, когда у вас есть жестко закодированное имя?
Запустите программу под чем-то вроде Process Monitor , чтобы узнать, что файл действительно открывается (или какие там могут быть ошибки ввода-вывода).
После внесения изменений, чтобы добавить дополнительную информацию к вопросу (проблема возникает при запуске из VS2008), это почти наверняка ваша проблема. Текущий каталог, в котором VS запускает программу, не является каталогом, в котором есть " 247.png " файл.
Можете ли вы проверить, какой у вас cwd
?
Вы можете #include < direct.h >
и использовать функцию _getcwd
, чтобы узнать, что это такое. Это, вероятно, укажет вам на виновника.