为什么类型转换会增加矩阵的行/列大小?

时间:2015-09-18 09:18:13

标签: matlab matrix typecast-operator

当我编写这段代码时(仅用于测试。这件事也会发生其他类型的渲染):

y_quan=typecast(y_quan,'int8');
<_> y_quan的维度发生了巨大变化。在进行类型转换之前,它是双类型1X15310矩阵。但是在这个类型转换操作之后它变成了int8型1X122480矩阵。 为什么会这样?有人请解释一下。 我怎么能阻止这个?

1 个答案:

答案 0 :(得分:5)

  

我该怎样防止这种情况?

不要使用typecast,这显然是错误的功能。

这是你明确要求的行为。来自Matlab documentation, which is the obvious place that someone should look when researching functionality

  

cast与MATLAB®typecast函数的不同之处在于它不会改变输入数据。 double总是在输出Y中返回与输入X中相同的字节数。例如,使用类型转换将16位整数1000转换为uint8将返回两个8位段中的完整16位(3和232)因此保持其原始值(3 * 256 + 232 = 1000)。另一方面,强制转换功能会将输入值截断为255。

这意味着您的cv::Point FindClosesedValue(std::vector<cv::Point> & point_a, std::vector<cv::Point> point_b) { double lowest_distance = std::numeric_limits<double>::max(); cv::Point best_point; for (cv::Point & a : point_a) { for (cv::Point & b : point_b) { double distance = CvFunctions::DistanceSquared(b, a); if (distance < lowest_distance) { lowest_distance = distance; best_point = a; } } } return best_point; } 矩阵(每个元素64位)具有15310 * 8字节存储空间。现在,将其转换为8位(== 1Byte)值,结果是8倍的元素。