【问题标题】:When I write the image it appears black当我写图像时,它显示为黑色
【发布时间】:2013-11-25 18:43:47
【问题描述】:

我有一个返回grayscale 图像的程序。但是,当我尝试编写图像时,它完全显示为black。这是为什么?我怎样才能写出图像并得到预期的结果?

谢谢。

【问题讨论】:

  • 尝试以下之一:imshow(img,[]) 或 imshow(uint8(img))。如果这可行,原因如下面的答案所述。您的值太低而无法显示或不属于正确的类别。

标签: matlab grayscale


【解决方案1】:

首先检查您的数据类型。您可以通过示例 double()uint16() 等来转换数据的类型。(查看类型转换的帮助)。 这是一个示例,您如何将值重新调整到 uint16 的强度范围,无符号整数具有 ~65k 可能的不同值。铸造当然会导致强度值的精度降低。

new_img(:,:) = uint16((new_img(:,:)./max(max(new_img(:,:),[],1)))*65536);

之后您应该能够将数据写入您的文件。

【讨论】:

  • 这里保存的图片好像是二进制的?
  • 向 Barkel 添加他的评论:您要保存的文件类型(扩展名:例如 *.jpeg)会有所不同。假设您正在使用“imwrite”函数,那么您还想考虑要保存的文件类型。并非所有文件类型都接受所有数据类型。对我来说,最常用的一个简单技巧是在保存之前对图像使用“mat2gray”函数。但请记住,它可能会以您认为不受欢迎的方式扩展数据。
【解决方案2】:

确保您的灰度图像属于正确的类别。此外检查生成图像中的值。如果它们太低,所有东西都会显示为黑色。如果您能提供更具体的信息,或许可以给出更详尽的答案。

【讨论】:

    【解决方案3】:

    如果您正在处理二值图像(在转换为灰度之前)并且您即将将其转换为灰度,那么您会突然将像素范围从 [0, 1] 更改为 [0, 255] .所以二进制图像中的值'1'是全白的,而灰度图像中的值几乎是黑色的。

    试试这个:

    img = imread('image_name.jpg');
    imshow(img*50)
    

    它可以确保您的图像是黑色的,或者只是它的像素值不合适。

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 2015-05-13
      • 1970-01-01
      • 2020-11-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多