在进行pytorch模型的部署过程中,图像数据与tensor类型数据的转换极为重要,opencv是常用的机器视觉处理库,因此本文先介绍Mat转Tensor,下文在将Tensor转Mat。
不废话,直接上代码。
void CvtCvImg2Tensor(cv::Mat Img, at::Tensor &output)
{
cv::cvtColor(Img, Img, CV_BGR2GRAY);
//normalization
Img.convertTo(Img, CV_32FC1, 1.0f / 255.0f);
//opencv format H*W*C+
torch::TensorOptions option(torch::kFloat32);
auto img_tensor = torch::from_blob(Img.data, { 1,Img.rows, Img.cols, Img.channels() }, option);// opencv H x W x C torch C x H x W
//pytorch format N*C*H*W
img_tensor = img_tensor.permute({ 0, 3, 1, 2 });
output = img_tensor.clone();
}
注:以上代码基于libtorch和opencv两个库。