【发布时间】:2018-03-15 09:31:49
【问题描述】:
我正在尝试使用 tf 1.5.0 c++ api 运行保存的图像分割模型。 我的模型得到一个大小为 1*256*256*3 的输入图像,并提供给这样的张量:
for (int x = 0; x < 256; x++) {
for (int y = 0; y <256; y++) {
data_(0, x, y, 0) =
(float) image_out.at<cv::Vec3b>(x, y)[0];
data_(0, x, y, 1) =
(float) image_out.at<cv::Vec3b>(x, y)[1];
data_(0, x, y, 2) =
(float) image_out.at<cv::Vec3b>(x, y)[2];
}
}
然后我使用sess->Run() 运行模型,并得到输出:
输入张量类型:浮点形状:[1,224,224,3] 值:[[[254 254 254]]]... 输出张量类型:浮点形状:[1,224,224,1] 值: [[[0.160249829][0.0639446825][0.0414313935]]]...
我想使用 cv::imwrite() 将输出保存到图像中。但是,张量不能直接保存。所以我尝试像这样转换张量:tensorflow::tensor->eigen::mat->cv::mat。代码是:
auto m = Eigen::Map<Eigen::Matrix<
float, /* scalar element type */
Eigen::Dynamic, /* num_rows is a run-time value */
Eigen::Dynamic, /* num_cols is a run-time value */
Eigen::RowMajor /* tensorflow::Tensor is always row-major */
>>(
outputs[0].flat<float>().data(), /* ptr to data */
outputs[0].dim_size(1), /* num_rows */
outputs[0].dim_size(2) /* num_cols */);
//std::cout << "m " << m << std::endl;
cv::Mat rotMatrix;
cv::eigen2cv(m, rotMatrix);
这会在编译时引发错误:
注意:模板 void cv::eigen2cv(const Eigen::Matrix<_scalar _rows _cols _options _maxrows _maxcols>&, cv::Mat&) void eigen2cv( const Eigen::Matrix<_tp _rows _cols _maxcols>& src, Mat& dst ) ^ /usr/local/opencv3.1/include/opencv2/core/eigen.hpp:63:6:注意:模板参数推导/替换失败: src/demo/demo.cpp:152:28:注意:
\u2018Eigen::Map >\u2019 不是 源自 \u2018const Eigen::Matrix<_scalar _rows _cols _options _maxrows _maxcols>\u2019 cv::eigen2cv(m, rotMatrix); ^ 在 src/demo/demo.cpp:11:0 中包含的文件中: /usr/local/opencv3.1/include/opencv2/core/eigen.hpp:81:6:注意: 模板无效 cv::eigen2cv(const Eigen::Matrix<_scalar _rows _cols _options _maxrows _maxcols>&, cv::Matx<_tp m n>&) void eigen2cv( const Eigen::Matrix<_tp _rows _cols _options _maxrows _maxcols>& 源代码, ^ /usr/local/opencv3.1/include/opencv2/core/eigen.hpp:81:6: 注意:模板参数推导/替换失败: src/demo/demo.cpp:152:28:注意:
\u2018Eigen::Map >\u2019 不是 源自 \u2018const Eigen::Matrix<_scalar _rows _cols _options _maxrows _maxcols>\u2019 cv::eigen2cv(m, rotMatrix); ^ make: *** [obj/demo.o] 错误 1
怎么了?
另一方面,我认为这不是从张量获取图片的好方法。我已经删除了 tf 的 c++ api 文档,但没有找到好方法。 https://www.tensorflow.org/api_docs/cc/class/tensorflow/tensor#classtensorflow_1_1_tensor_1a6afab48885080a80ff0b52437959d929
那么,有没有方便的方法呢?
【问题讨论】:
-
您找到问题的解决方案了吗?我也有同样的问题,我也在寻找答案。所以,如果是的话。请公布答案。
标签: c++ opencv tensorflow eigen