我需要运行一个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中,系统命令有效。
答案 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会起作用。