首页 > 解决方案 > 如何将opencv mat灰度图像转换为pytorch张量?

问题描述

我想将 cv::Mat 类转换为 torch::Tensor 类并将它们放入 libtorch 的 CNN 模块中进行预测。我应该如何将 Mat 类转换为 Tensor 类?我的 CNN 模块是使用 mnist 训练集生成的 pt 文件。这个mnist训练集的训练图像是单通道灰度图像。如果我要测试,它应该加载一个灰度图,所以我想将单通道灰度图转换为张量。我使用的语言是c++。</p>

标签: c++opencvpytorch

解决方案


谢谢您的帮助。最后,我找到了解决方案。之前,我对张量类了解不多。张量有四个元素,分别是图像的数量、高度、宽度和字节深度。

  std::string p1 = "D:";
  std::string p2;
  std::cin >> p2;
  std::string p3 = ".png";
  std::string path = p1 + p2 + p3;
  cv::Mat image = cv::imread(path,cv::IMREAD_GRAYSCALE);
  torch::Tensor img_tensor = torch::from_blob(image.data, { 1, image.rows, image.cols, 1 }, torch::kByte);
  img_tensor = img_tensor.permute({ 0, 3, 1, 2 });
  img_tensor = img_tensor.toType(torch::kFloat);
  img_tensor = img_tensor.div(255);
  auto a = net->predict(img_tensor);
  std::cout << a.argmax() << std::endl;

推荐阅读