当前位置: 首页 > 面试题库 >

将float64类型的np.array转换为uint8缩放值类型

孙承
2023-03-14
问题内容

我有代表特定灰度图像的特定np.array`数据。我需要使用SimpleBlobDetector(),不幸的是,该SimpleBlobDetector()仅接受8位图像,因此我需要转换此图像,显然会有质量损失。

我已经尝试过:

import numpy as np
import cv2
[...]
data = data / data.max() #normalizes data in range 0 - 255
data = 255 * data
img = data.astype(np.uint8)
cv2.imshow("Window", img)

但是 cv2.imshow 不能提供预期的图像,但是会产生奇怪的失真…

最后,我只需要将np.float64转换为np.uint8即可缩放所有值,并截断其余所有值,例如。65535变为255,65534变为254,依此类推…。

谢谢。


问题答案:

标准化图像的更好方法是取每个值,然后除以数据类型所经历的最大值。这样可以确保图像中动态范围较小的图像保持较小,并且不会被意外归一化,从而变为灰色。例如,如果您的图像的动态范围为[0-2],则现在的代码会将其缩放为强度为[0, 128, 255]。您希望将它们转换为后保持较小np.uint8

因此,将每个值除以图像 类型
可能的最大值,而不是实际图像本身。然后,您可以将其缩放255以产生标准化的结果。使用numpy.iinfo并提供dtype图像的类型(),您将获得该类型的信息结构。然后,您可以从此max结构访问该字段以确定最大值。

因此,通过以上操作,对您的代码进行以下修改:

import numpy as np
import cv2
[...]
info = np.iinfo(data.dtype) # Get the information of the incoming image type
data = data.astype(np.float64) / info.max # normalize the data to 0 - 1
data = 255 * data # Now scale by 255
img = data.astype(np.uint8)
cv2.imshow("Window", img)

请注意,我另外将图像转换为np.float64,以防输入数据类型不是这种情况,并在进行除法时保持浮点精度。



 类似资料:
  • 问题内容: 我正在尝试将字节切片转换为GoLang中的。我找不到在线解决此问题的方法。我见过先转换为字符串然后转换为a的建议,但这似乎不起作用,它失去了它的值,最后以零结束。 例: 而且它不起作用… 问题答案: 例如, 输出:

  • 问题内容: 我从“ reflect”包中的函数调用获取此返回值: 。 想知道我是否可以在返回值内访问实际地图,如果可以,怎么办? 编辑: 因此,这是我在进行返回Value对象的调用的地方。它返回`[< map[string]string Value ][< map[string]string Value >]`为常规地图。 问题答案: 使用方法可以将大多数反射对象转换回一个值。 获取此值后,可以将

  • 问题内容: 我很难查询用户,其定义为: MariaDB中的表定义为: 但是当我查询它时: 我收到此错误: 而表中有一些行。 我也尝试过, 但仍然遇到相同的错误。 所以我不知所措,因为这里出了什么问题?我该如何解决? PS 虽然我的问题竟然有相同的答案这不过这里的背景是不同的(而不是)。另外,由于这里是该错误的主题,因此对于使用谷歌相同错误的人来说,搜索起来可能更容易。因此,也许这值得作为一个单独的

  • 这是控制器代码部分: 我收到这条消息: 出现错误(类型=错误请求,状态=400)。无法将类型[java.lang.String]的值转换为所需类型[java.util.Date];嵌套异常为org.springframework.core.convert.conversionfailedexception:无法将值“Wed Jun 08 00:00:00 WET 2016”从类型[java.lan

  • 问题内容: 我在SO的某处找到了此字符串扩展名,它使我可以将html代码转换为属性字符串: 在Swift 3中工作正常,但在Swift 4中,Xcode抱怨: 无法将类型“ NSAttributedString.DocumentAttributeKey”的值转换为预期的字典密钥类型“ NSAttributedString.DocumentReadingOptionKey” 我该如何解决? 问题答案

  • 问题内容: 我试图将视图控制器转换为详细视图控制器,但不能。我正在使用Core Data(第一次)。错误发生在prepareForSegue方法中,显示为:“无法将类型’UIViewController’(0x1b81cdc)的值强制转换为’Patternz.PatternDetailViewController’(0x32488)。(lldb)” 希望能解释为什么它不起作用。这是文件。 View