gpt4 book ai didi

numpy - 将有符号 float 转换为 uint8 图像 opencv

转载 作者:太空宇宙 更新时间:2023-11-03 21:59:13 32 4
gpt4 key购买 nike

我有一张来自 cv2.matchTemplate 的浮点范围为 -1,1 的图像:

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)

res 的值如下:[[ 0.00730964 -0.00275442 -0.02477949 ... -0.16014284 -0.13686109 -0.13015044]

我可以看到模式匹配的灰度图:

cv2.imshow("Match", res)

但是我想在颜色图中看到,使用:

resC = cv2.applyColorMap(res, cv2.COLORMAP_JET)

使用它我立即遇到了以下问题:“cv::ColorMap 仅支持函数‘operator()’中类型为 CV_8UC1 或 CV_8UC3 的源图像”

所以我尝试 skimage 转换:

from skimage import img_as_ubyte
res = img_as_ubyte(res)

from skimage import exposure
res = exposure.rescale_intensity(res, out_range=(0, 255))

有了它们,我得到如下输出:[[48 46 42 ... 14 19 20] [52 56 54 ... 22 28 30]

现在更好,整数。但是,有些地方出了问题,因为我只得到(蓝色)单色颜色图,而不是来自 cv2.COLORMAP_JET 范围的漂亮颜色图。它似乎以某种方式移动了。

关于如何从 -1,1 正确转换为 0,255 的任何提示?

最佳答案

为什么这不起作用:

我不认为此函数正在执行您希望的重新缩放。考虑来自 reference manual 的示例下面:

>>> image = np.array([-10, 0, 10], dtype=np.int8)
>>> rescale_intensity(image, out_range=(0, 127))
array([ 0, 63, 127], dtype=int8)

它将输入数组中的最小数字映射到 0,将最大数字映射到 1。如果输入数组中没有准确的 -1 和 1 值,则无法使用此函数。


您可以做什么:

我建议编写一个简单的函数来将值从 -1 到 1 重新调整为 0 到 255:

>>> image = np.random.uniform(-1,1,(3,3))
>>> scaled = (image + 1)*255/2.
>>> image
array([[ 0.59057256, 0.01683666, -0.24498247],
[-0.25144806, -0.32312655, -0.02319944],
[ 0.50878506, -0.04102033, 0.3094886 ]])
>>> scaled
array([[ 202.79800129, 129.64667417, 96.26473544],
[ 95.44037187, 86.3013643 , 124.54207199],
[ 192.37009459, 122.26990741, 166.95979601]])

工作原理:

  • image + 1 将所有数字移动到 [0,2] 范围
  • (image +1)/2. 将所有数字缩放到 [0,1]
  • (image +1)*255/2. 将数字从 [0,1] 缩放到 [0,255]

关于numpy - 将有符号 float 转换为 uint8 图像 opencv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642813/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com