OpenCV cvLoadImage не принимает char * для имени файла, но принимает argv [1] - PullRequest
0 голосов
/ 11 февраля 2011

Я понимаю, что этот вопрос задавался раньше. Я прочитал ответы и попробовал решение, но оно не решило его для меня.

Я использую OpenCV 2.1 в Ubuntu 10.10 (32-разрядная версия) и Eclipse C IDE.

Моя проблема:

Если я читаю текстовую строку из файла, сохраняю ее в переменной char * и передаю ее в cvLoadImage, я ничего не получаю. текстовая строка, которую я прочитал из файла, является полностью определенным путем файла к определенному изображению.

вот код:

FILE *f = fopen("./input.txt","r");
char img1[50];
fgets(img1,50,f);
char* img3 = strtok(img1,"\n");
IplImage* frame = cvLoadImage(img3);

В результате кадр теперь равен 0x00000000, а изображение отсутствует

НО

Если я передаю тот же текст в качестве аргумента исполняемому файлу, я могу сохранить argv [1] в char * и передать его в cvLoadImage (), и он считывает изображение, как и ожидалось.

вот код:

char* img3 = argv[1];
IplImage* frame = cvLoadImage(img3);

Я не уверен, в чем причина этого. : S

строка, переданная в качестве аргумента и в файле, точно: (включая кавычки) "/home/atharva/Documents/FYP/1a.jpg"

Спасибо

1 Ответ

2 голосов
/ 11 февраля 2011

Вам необходимо удалить кавычки из строки в файле. Кавычки нужны только для синтаксического анализатора оболочки, чтобы в первую очередь правильно получить путь в список программ argv - и даже тогда только действительно необходимо, если путь к файлу имеет встроенные пробелы.

Поскольку fgets () читает всю строку текста (вплоть до \ n), нет необходимости что-либо заключать в кавычки (хотя 50 символов не так много для пути к файлу - вы можете захотеть увеличить этот размер буфера) , И если по какой-то причине он должен быть заключен в файл в кавычках, вам нужно удалить их, прежде чем передать его в cvLoadImage ().

...