将double转换为uint8时,让Matlab发出警告,反之亦然?

时间:2015-03-16 13:53:48

标签: matlab casting

通常在Matlab中,颜色由RGB强度值的三个元素向量表示,精度为uint8(范围0 - 255)或双精度(范围0 - 1)。诸如imshow之类的Matlabs函数可以与任一表示一起使用,使其在程序中易于使用。

然而,在将颜色值从一种类型的矩阵分配给另一种类型的矩阵时,同样容易引入错误(因为该值是静默转换的,但未重新缩放到新范围)。我花了几个小时才发现这样的错误,我想确保它永远不会再被引入。

如何在进行类型转换时让Matlab显示警告?

理想情况下,只有转化时间介于doubleuint8之间。它也应该很难停用(即加载工作区时,或者当matlab崩溃时,该选项不会重置)。

1 个答案:

答案 0 :(得分:9)

一种可能的解决方案是定义您自己的uint8函数,该函数转换为uint8并在某个值被截断时发出警告。

您应该将此功能放在一个阴影内置uint8功能的文件夹中。例如,您的用户文件夹是一个不错的选择,因为它通常是path中的第一个。

或者,如Sam Roberts所述,如果您希望仅在从double 转换为uint8时将此功能称为(不是在从任何其他类型转换为uint8),将其放在路径中名为@double的文件夹中。

function y = uint8(x)
y = builtin('uint8', x);
if any(x(:)>255) || any(x(:)<0)
    warning('MATLAB:castTruncation', 'Values truncated during conversion to uint8')
end

默认情况下警告处于启用状态。您可以使用命令warning('on','MATLAB:castTruncation')warning('off','MATLAB:castTruncation')打开或关闭它(感谢CitizenInsane的建议)。