当我编写这段代码时(仅用于测试。这件事也会发生其他类型的渲染):
y_quan=typecast(y_quan,'int8');
<_> y_quan的维度发生了巨大变化。在进行类型转换之前,它是双类型1X15310矩阵。但是在这个类型转换操作之后它变成了int8型1X122480矩阵。
为什么会这样?有人请解释一下。
我怎么能阻止这个?
答案 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倍的元素。