当前位置: 首页 > 知识库问答 >
问题:

使Matlab在将双精度转换为uint8时发出警告,反之亦然?

骆照
2023-03-14

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

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

当发生类型转换时,如何使Matlab显示警告?

理想情况下,只有当转换在uint8之间时才会这样。它也应该难以停用(即在加载工作区或matlab崩溃时,选项不会重置)。

共有1个答案

冀翰翮
2023-03-14

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

您应该将此函数放置在一个文件夹中,在该文件夹中它会隐藏内置的uint8函数。例如,您的用户文件夹是一个不错的选择,因为它通常出现在路径中的第一个。

或者,正如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

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

 类似资料:
  • 问题内容: 我正在寻找一种将NumPy数组传递给Matlab的方法。 我已经设法通过使用将数组存储到图像中,然后使用加载它来做到这一点,但这当然会使矩阵包含0到256之间的值,而不是“真实”值。 将这个矩阵的乘积除以256,再加上原始NumPy数组中的最大值,可以得出正确的矩阵,但是我觉得这有点乏味。 有没有更简单的方法? 问题答案: 当然,只要使用 举个例子: 同样,有。 然后,您使用将其加载到

  • 我是Matlab新手,所以这应该是一个简单的问题。我有一个带有几个特定像素的图像,我需要从中获取红色RGB分量,求和,并将结果存储到一个变量中。默认情况下,这些值的类型为uint8,因此总和不能超过255。我尝试使用double()的每个组合将R值转换为double,但似乎没有任何效果。下面是从终端复制的实际情况:(所有像素的R值都在200以上) 我做错了什么?我不能将这些值转换为双精度值吗?

  • 问题内容: 甲 字符串 一个的表示 双 写入和从由文件读 C# 应用。 C#应用程序使用以下片段将双精度型转换为字符串: C#应用程序使用以下片段将字符串转换为双精度型 如果要在 Java 应用程序中写入和读取同一文件,您将如何转换类型而不丢失数据? 问题答案: 我相信,只要使用就可以并且不会丢失数据。特别是从docs中获取: m或a的小数部分必须打印多少个数字?必须至少有一位数字来表示小数部分,

  • 问题内容: 我正在使用Android应用程序,并且要将本地时间(设备时间)转换为UTC并将其保存在数据库中。从数据库中检索它之后,我必须再次将其转换并显示在设备的时区中。谁能建议如何用Java做到这一点? 问题答案: 我使用这两种方法将本地时间转换为GMT / UTC,反之亦然,这对我来说没有任何问题。 将要转换为设备本地时间的GMT / UTC日期传递给此方法:

  • 我正在开发Android应用程序,我想将本地时间(设备时间)转换为UTC,并将其保存在数据库中。从数据库中检索后,我必须再次将其转换并显示在设备的时区中。有人能建议如何在Java中做到这一点吗?

  • 问题内容: 我需要将纬度经度值转换为像素位置以及相反的操作。我发现许多解决方案都来自lat / lng-> pixel,但反之则找不到任何东西。 一些注意事项: 地图是固定大小,无缩放,无图块。 我不需要任何超级准确的信息,这并不重要。 最好是墨卡托投影,但不是必需的。我实际上并没有显示结果。(任何2D投影) 我不能依赖任何基于Web的API,即:没有Google Maps 只要不依赖任何平台特定