在matlab中调用时,无法在C ++中使用opencv读取图像

时间:2017-08-02 07:13:09

标签: c++ matlab opencv

我将在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

1 个答案:

答案 0 :(得分:1)

失败了,因为Matlab使用自己的OpenCV dylib,这与你的应用版本不兼容。只需使用DYLD_INSERT_LIBRARIES(等于Linux中的LD_PRELOAD)即可强制Matlab使用您应用的OpenCV版本。

你可以找到你的应用版本otool(等于linux中的ldd

otool -L /path/to/your/app/app

这将为您的应用提供所有dylib。用

打开你的Matlab
DYLD_INSERT_LIBRARIES="path/to/dylib.dylib:another/path/dylib2.dylib" /path/to/matlab

运行您的代码,这应该可以。