【发布时间】:2018-03-23 04:48:11
【问题描述】:
我有一个特定的 np.array data 代表一个特定的灰度图像。 我需要使用 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 等等....有什么帮助吗?
谢谢。
【问题讨论】:
-
发生了什么奇怪的失真?对我来说,规范化代码似乎很好。是
datanp.float64的类型吗?此外,在我看来,将 65535 转换为 255 似乎您的预期输入类型是np.uint16,而不是np.float64。 -
图像似乎具有某种粒度,例如黑色背景变为灰色且不稳定(???)。你有什么替代建议吗?
-
我建议将图像除以该类型所经历的最大值,而不是图像中的最大值。我已经写了一个答案。让我知道它是否有效。
-
我除以 data.max() 也是为了标准化 0-1 范围内的值
标签: python image numpy opencv image-processing