我将在C ++程序中使用cv :: imread加载图像。当我直接在终端中运行它时,它运行良好。但是当我在matlab中使用“system”或“dos”调用它时,它总是返回空Mat而没有任何错误。
我在MacOS Sierra 10.12.4工作。 OpenCV版本是2.4.13。 Matlab版本是R2015b。谁能帮助我?请给我一些建议。
例如,我写了一个测试代码。
#include <opencv2/opencv.hpp>
int main(){
std::string path = "/Users/zhefeng.wzf/0001.jpg";
cv::Mat image = cv::imread(path);
if(image.empty()){
printf("Cannot load image:%s\n",path.c_str());
}else{
printf("Load the image successfully.\n");
cv::imshow("image",image);
cv::waitKey();
}
return 0;
}
然后我用
编译它g ++ readImg.cpp -o readImg`pkg-config --cflags --libs opencv`
当我在终端中运行时, It works well.
但是当我在matlab中运行它时, it failed
答案 0 :(得分:1)
失败了,因为Matlab使用自己的OpenCV dylib,这与你的应用版本不兼容。只需使用DYLD_INSERT_LIBRARIES
(等于Linux中的LD_PRELOAD
)即可强制Matlab使用您应用的OpenCV版本。
你可以找到你的应用版本otool
(等于linux中的ldd
)
otool -L /path/to/your/app/app
这将为您的应用提供所有dylib。用
打开你的MatlabDYLD_INSERT_LIBRARIES="path/to/dylib.dylib:another/path/dylib2.dylib" /path/to/matlab
运行您的代码,这应该可以。