通常在Matlab中,颜色由RGB强度值的三个元素向量表示,精度为uint8(范围0-255)或双精度(范围0-1).Matlabs的功能,例如imshow使用任何一种表示,使得它们都易于在程序中使用.
然而,在将颜色值从一种类型的矩阵分配给另一种类型的矩阵时,同样容易引入错误(因为该值是静默转换的,但不会重新缩放到新范围).刚刚花了几个小时发现这样的错误,我想确保它再也不会被引入.
在进行类型转换时,如何让Matlab显示警告?
理想情况下,只有当转换介于double和之间时才会出现uint8.它也应该很难停用(即加载工作区时,或者当matlab崩溃时,不重置选项).
一种可能的解决方案是定义您自己的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
Run Code Online (Sandbox Code Playgroud)
默认情况下警告处于启用状态.你可以用下面的命令切换或关闭warning('on','MATLAB:castTruncation'),并warning('off','MATLAB:castTruncation')(感谢CitizenInsane您的建议).