用C++预处理输入图像并生成blob

大家好,我现在用C++生成input,blob碰到一些问题,想请教一下大家:
 
在training中针对input image的data transform自动完成,我现在想要deploy训练好的caffemodel。因为项目的原因,我只能用C++实现一切。
 
在deploy的时候所有的data transform都要自行先处理再送去deploy,在我的情况里只要做scaling。我看过网上一些别人的例子,生成blob都是遵循image->datum->blob的顺序。在io.cpp中用一个CVMatToDatum函数可以用来转化image到datum。问题是图像进过scaling预处理后image格式变成了float,而CVMatToDatum中规定image只能是uchar的。如果我自己写一个类似CVMatToDatum,可以处理float图像的函数,不知道行不行,还是说datum.data()有规定必须是uchar格式的?
 
另外,请问大家有更好的data transform+生成blob的方法吗?
 
非常感谢!
已邀请:

xjtuljy

赞同来自: xinmiao

问题解决了。发现blob->mutable_cpu_data() 是float的,所以只要用for loop把里面的值一个一个都transform一遍就好了:
  float* input_data = blob->mutable_cpu_data();
  for (int i = 0; i<blob->channels()*blob->height()*blob->width();i++){
    input_data[i] = input_data[i]/255;
  }
 

要回复问题请先登录注册