无法使用system()在matlab中运行可执行文件,但它可以在命令行中运行

时间:2014-06-22 03:29:47

标签: c++ matlab opencv

我需要运行一个C ++可执行文件,该文件使用Matlab中的system命令使用OPencv库。我已经使用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 );

为什么会这样?我的意思是,如果代码在命令行中运行,为什么它不能与系统Matlab命令一起运行? matlab不能识别cvLoadImage函数吗?我正在使用Matlab R2014a和OPencv-2.4.9。这段代码是从另一台PC复制而来的,我只是重新编译了它。在复制代码的原始PC中,系统命令有效。

2 个答案:

答案 0 :(得分: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 :(得分:-1)

我试过了,发现使用sudo会起作用。