我正在尝试从我之前创建的张量中取回图像并将其可视化,但是,生成的图像似乎失真/垃圾。这就是我将 aCV_8UC3
转换为相应的方法at::Tensor
:
at::Tensor tensor_image = torch::from_blob(img.data, { img.rows, img.cols, 3 }, at::kByte);
这就是我将其转换回图像的方式:
auto ToCvImage(at::Tensor tensor)
{
int width = tensor.sizes()[0];
int height = tensor.sizes()[1];
try
{
cv::Mat output_mat(cv::Size{ height, width }, CV_8UC3, tensor.data_ptr<int>());
return output_mat.clone();
}
catch (const c10::Error& e)
{
std::cout << "an error has occured : " << e.msg() << std::endl;
}
return cv::Mat(height, width, CV_8UC3);
}
这是原始图像的样子:
这就是我转换后得到的:
现在,如果我在创建张量期间使用at::kInt
而不是:kByte
at::Tensor tensor_image = torch::from_blob(img.data, { img.rows, img.cols, 3 }, at::kByte);
我不再得到扭曲的图像!但是,网络输出将关闭,这意味着输入出现问题!
这里有什么问题,我应该怎么做?