Почему OpenCV отклоняет cvLoadImage (& # 8220; string.ext & # 8221;), но принимает cvLoadImage (argv [1])?

StackOverflow https://stackoverflow.com/questions/445295

  •  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 , чтобы узнать, что это такое. Это, вероятно, укажет вам на виновника.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top