【发布时间】:2021-02-20 21:06:45
【问题描述】:
我有一个 cv::Mat 是 CV_32SC3 类型,它存储正值和负值。
将其转换为张量时,值混乱:
cout << in_img << endl;
auto tensor_image = torch::from_blob(in_img.data, {1, in_img.rows, in_img.cols, 3}, torch::kByte);
in_img 有负值,而 tensor_image 打印出来后,与 in_img 完全不同。
负值消失了(它似乎以某种方式将其标准化为 255 范围)。我尝试像这样转换为 Long:
auto tensor_image = torch::from_blob(in_img.data, {1, in_img.rows, in_img.cols, 3}, torch::kLong);
但是当我像这样打印值时,我得到了段错误:
std::cout << "tensor_image: " << tensor_image << " values." << std::endl;
所以,我试着只看第一个元素:
std::cout << "input_tensor[0][0][0][0]: " << tensor_image[0][0][0][0] << " values." << std::endl;
而且值和我在python实现中看到的不一样:((
【问题讨论】:
-
澄清一下,在上面的例子中,
in_img的类型是cv::Mat? -
是的,普拉纳夫。这是正确的。当我使用 at::kByte 读取它时,一切都很好.. 期望值似乎是按比例缩放的,这是我不想要的(我想要包含 + 和 - 值的原始 mat 矩阵)