批处理调用模型的时候,如果逐像素给tensor对象数据部分赋值的话,效率是很低的,尤其是对于一些图片数据,所以数据块直接拷贝可以大大提高效率,

先取得数据指针:

output_tensor->flat<float>().data();

再直接对象拷贝好了
std::copy(p, p + arrSize, imgTensorFlat + t * arrSize);
void CVMat_to_Tensor_Batch_BLOB(std::vector<Mat> imgs, Tensor* output_tensor, int input_rows, int input_cols)
{
float *imgTensorFlat = output_tensor->flat<float>().data();
int arrSize = input_rows * input_cols * 3;
auto output = output_tensor->shaped<float, 4>({ (long long)imgs.size(), input_rows, input_cols, 3 });
for (int t = 0; t < imgs.size(); t++)
{
Tensor tensorT(DT_FLOAT, TensorShape({ 1,input_rows,input_cols,3 }));
int imgRow = imgs[t].rows;
int imgCol = imgs[t].cols; float fScale = std::min(input_cols*1.0/ imgCol, input_rows*1.0/ imgRow); int newRow = imgRow * fScale;
int newCol = imgCol * fScale; Mat oriImg;
resize(imgs[t], oriImg, cv::Size(newCol, newRow), cv::INTER_LINEAR);
cv::Mat tmp;
int dw = (input_cols - newCol) / 2;
int dh = (input_rows - newRow) / 2;
copyMakeBorder(oriImg, tmp, dh, input_rows - newRow-dh,dw, input_cols - newCol-dw, BORDER_CONSTANT, Scalar(128.0, 128.0, 128.0)); tmp.convertTo(tmp, CV_32FC3);
tmp = tmp/255.0;
float* p = tmp.ptr<float>();
std::copy(p, p + arrSize, imgTensorFlat + t * arrSize);
} return;
}

最新文章

  1. 10 行 Python 代码写的模糊查询
  2. Windows下,MySQL root用户忘记密码解决方案
  3. C/C++中的NULL讨论和总结
  4. gulp实用插件总结
  5. BZOJ 1087 【SCOI2005】 互不侵犯King
  6. UItextView回收键盘的几种方式
  7. hive报lzo Premature EOF from inputStream错误
  8. 【GOF23设计模式】解释器模式 &amp; 访问者模式
  9. 第三个sprint第一天
  10. centos6.6 虚拟机集群搭建
  11. .Net C/S系统开发框架(楚楚原创)
  12. 查询sybase DB中占用空间最多的前20张表
  13. java ee开发报错
  14. JAVA自增自减的玄机
  15. 【框架学习与探究之日志组件--Log4Net与NLog】
  16. JAVA通过注解处理器重构代码,遵循单一职责
  17. tr069开源代码——cwmp移植
  18. API文档模板
  19. High Availability手册(1): 环境
  20. Java安全编码:糟糕的在线建议和令人困惑的APIs

热门文章

  1. MySQL下载,安装,配置环境变量【0基础小白用】
  2. parted创建硬盘分区并创建LVM
  3. ref(代替id)
  4. python的惊艳之举--源于一个同事分享16种字符串反转方式
  5. ADC多通道采样DMA传输模板
  6. PyQt5弹框定时关闭(python)
  7. CPU、内存的占用率
  8. jquery获取单选按钮选中的值
  9. Prometheus API说明
  10. yaml文件读取转化为类