lef*_*fty 16 c++ opencv tensorflow
在Tensorflow C++中,我可以使用将图像文件加载到图形中
tensorflow::Node* file_reader = tensorflow::ops::ReadFile(tensorflow::ops::Const(IMAGE_FILE_NAME, b.opts()),b.opts().WithName(input_name));
tensorflow::Node* image_reader = tensorflow::ops::DecodePng(file_reader, b.opts().WithAttr("channels", 3).WithName("png_reader"));
tensorflow::Node* float_caster = tensorflow::ops::Cast(image_reader, tensorflow::DT_FLOAT, b.opts().WithName("float_caster"));
tensorflow::Node* dims_expander = tensorflow::ops::ExpandDims(float_caster, tensorflow::ops::Const(0, b.opts()), b.opts());
tensorflow::Node* resized = tensorflow::ops::ResizeBilinear(dims_expander, tensorflow::ops::Const({input_height, input_width},b.opts().WithName("size")),b.opts());
Run Code Online (Sandbox Code Playgroud)
对于嵌入式应用程序,我想将OpenCV Mat传递给此图.
我如何将Mat转换为可用作tensorflow :: ops :: Cast或tensorflow :: ops :: ExpandDims的输入的张量?
Pet*_*den 23
它不是直接来自CvMat,但您可以在TensorFlow Android示例中看到如何从内存数组初始化Tensor的示例:https: //github.com/tensorflow/tensorflow/blob/0.6.0/tensorflow /examples/android/jni/tensorflow_jni.cc#L173
你可以从创建一个新的tensorflow :: Tensor对象开始,使用类似的东西(所有代码都未经测试):
tensorflow::Tensor input_tensor(tensorflow::DT_FLOAT,
tensorflow::TensorShape({1, height, width, depth}));
这将创建一个具有浮点值的Tensor对象,批量大小为1,大小为width
x height
,并带有depth
通道.例如,具有3个通道的128宽×64高图像将以形状通过{1, 64, 128, 3}
.批量大小仅在您需要在一次调用中传入多个图像时使用,对于简单用途,您可以将其保留为1.
然后你会使用这样的一行得到张量后面的底层数组:
auto input_tensor_mapped = input_tensor.tensor<float, 4>();
该input_tensor_mapped
对象是新创建的张量中数据的接口,然后您可以将自己的数据复制到其中.在这里,我假设您已设置source_data
为指向源数据的指针,例如:
const float* source_data = some_structure.imageData;
然后,您可以遍历数据并将其复制:
for (int y = 0; y < height; ++y) {
const float* source_row = source_data + (y * width * depth);
for (int x = 0; x < width; ++x) {
const float* source_pixel = source_row + (x * depth);
for (int c = 0; c < depth; ++c) {
const float* source_value = source_pixel + c;
input_tensor_mapped(0, y, x, c) = *source_value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有很好的机会来优化这种天真的方法,我手边没有示例代码来展示如何处理获取源数据的OpenCV方面,但希望这对您有所帮助.