【问题标题】:Convert signed float to uint8 image opencv将有符号浮点数转换为 uint8 图像 opencv
【发布时间】:2019-01-09 14:05:54
【问题描述】:

我有一个来自 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 的任何提示?

【问题讨论】:

    标签: numpy opencv scikit-image


    【解决方案1】:

    为什么这不起作用:

    我不认为此功能正在执行您希望的重新缩放。考虑下面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]

    【讨论】:

    • 太棒了。工作得很好,谢谢!
    • 我只添加了“scaled = np.uint8(scaled)”来截断小数。这样我就可以使用标准的 opencv 图像处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2021-05-11
    • 2016-06-19
    • 2019-11-14
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多