#c #matlab #opencv
#c #matlab #opencv
Вопрос:
Мне нужно запустить исполняемый файл C , который использует библиотеку OpenCV, используя системную команду в Matlab. Я уже скомпилировал весь код с помощью make, и он прошел успешно. Когда я запускаю программу в командной строке, она работает, как показано ниже.
lib/sift/bin/siftfeat -x -o tampered1.txt tampered1.jpg
Finding SIFT features...
Found 2596 features.
Проблема в том, что я запускаю его с помощью matlab. Возникает следующая ошибка:
>>system('lib/sift/bin/siftfeat -x -o tampered1.txt tampered1.jpg')
Finding SIFT features...
Error: unable to load image from tampered1.jpg
lib/sift/bin/siftfeat -x -o tampered1.txt tampered1.jpg: Aborted
Ошибка возникает в lib / sift / src/ siftfeat.c в следующем фрагменте кода:
fprintf( stderr, "Finding SIFT features...n" );
img = cvLoadImage( img_file_name, 1 );
if( ! img )
fatal_error( "unable to load image from %s", img_file_name );
Почему это происходит? Я имею в виду, если код выполняется в командной строке, почему он не запускается с помощью system Matlab command? разве matlab не распознает функцию cvLoadImage? Я использую Matlab R2014a и OpenCV-2.4.9. Этот код был скопирован с другого компьютера, и я только что перекомпилировал его. На исходном компьютере, на который был скопирован код, работает системная команда.
Комментарии:
1. Вам нужно указать полный путь к
tampered1.jpg
?2. Вы используете относительный путь, каков ваш текущий рабочий каталог в обоих случаях?
3. Мне не нужно указывать полный путь к изображению, потому что он находится по тому же пути, по которому я выполняю системную команду matlab. В обоих случаях я нахожусь в одном каталоге (командная строка и Matlab).
4. Каталог ~/sift-forensic
Ответ №1:
Вы запускаете system()
-cmd не в той папке. Пока вы вызываете свой двоичный файл с абсолютным путем, путь к вашим изображениям является относительным. Поэтому изображения должны находиться в папке, где matlab выполняет ваш system()
-cmd. Вы можете просто проверить это, выполнив:
>> system('pwd')
"Folder/where/matlab/exec/your/cmd"
Если выходные данные соответствуют местоположению вашего изображения, все должно быть в порядке, в противном случае вы должны указать вашей программе абсолютный путь следующим образом:
>> system('lib/sift/bin/siftfeat -x -o Folder/to/your/txt/tampered1.txt Folder/to/your/image/tampered1.jpg')
Комментарии:
1. Изображение находится в той же папке, где я выполняю системную команду. Если я запускаю его с абсолютным путем, возникает та же ошибка. >> system(‘lib /sift/bin/ siftfeat -x -o ~/sift-forensic/tampered1.txt ~/sift-forensic/tampered.jpg ‘). Если я использую как абсолютный, так и относительный пути в командной строке, они работают. В любом случае спасибо.
Ответ №2:
Я попробовал и обнаружил, что использование sudo будет работать.
Комментарии:
1. Это должен быть комментарий, а не ответ.