Не удается запустить исполняемый файл в matlab с помощью system(), но он работает в командной строке

#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. Это должен быть комментарий, а не ответ.