为什么cv :: imread在包含tensorflow的头之后返回NULL

时间:2017-12-11 03:42:44

标签: c++ opencv tensorflow imread

我在我的代码中使用tensorflow c ++ API。我发现当我从文件加载图像时,图像为NULL。然后我写了一个测试代码来找出原因。

这是我的测试代码:

#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv; 
using namespace std;

//#include "tensorflow/core/public/session.h"
//#include "tensorflow/core/protobuf/meta_graph.pb.h"

int main()
{
    Mat imgtry = imread("lena.jpg");
    printf("%dx%d", imgtry.cols, imgtry.rows );
    return 0;
}

当我评论tensorflow的标头时,输出值是255x255,但是一旦取消注释标头,输出值就是0x0。为什么???

在修改链接库的序列后,问题似乎有所改变。首先,我将tensorflow_cctensorflow_frameworok以及opencv的libriries链接起来。现在,我将tensorflow的库放在opencv之后,让相应的include目录作为相同的序列。然后我可以正常读取图像,甚至取消注释上面代码区域中的代码。但是新的问题出现了。

#include "opencv2/opencv.hpp"
#include "opencv2/imgcodecs.hpp"

//it's ok.
#include "tensorflow/core/public/session.h"
#include "tensorflow/core/protobuf/meta_graph.pb.h"

using namespace std;    
int main()
{

    cv::Mat img;
    img = cv::imread("lena.jpg");
    if(img.empty() == true) {
        cout << "Error!" << endl;
        exit(1);
    }
    cout << "ok!" << endl;

    //uncomment this, the img is always emtpy!!!
//  tensorflow::SessionOptions sessOptions;
//  sessOptions.config.mutable_gpu_options()->set_allow_growth(true);
//  auto session = tensorflow::NewSession(sessOptions);
//  if(session == nullptr) {
//      cout << "Could not create Tensorflow session." << endl;
//      exit(1);
//  }

    return 0;
}

1 个答案:

答案 0 :(得分:2)

这是known bug

随意使用变通方法/解决方案/错误状态/等更新此社区Wiki答案... 功能