首页 > 解决方案 > 如何在两个值之间使用 CV2 标准化图像?

问题描述

我目前正在尝试标准化我从带有 cv2 的深度相机接收到的深度图像。

我已经尝试了以下方法:我使用这行代码将收到的图像标准化为 0 和 1 之间的值:

 cv2.normalize(depth_array, depth_array, 0, 1, cv2.NORM_MINMAX)

这种归一化的问题是我的深度图像没有在两个设定值之间归一化,而是在我的 depth_array 的最大值和最小值之间归一化,这导致最近的物体总是黑色的。

我想改变它在两个设定值之间的标准化,比如 [0 8] -> [0 1]。谷歌搜索时,我没有找到任何可以做我想做的事情。有没有办法在两个设定值之间标准化图像?

标签: pythonopencv

解决方案


重构通常具有这种结构:

# linear reframe [min1, max1] -> [min2, max2]
def reframe(value, min1, max1, min2, max2):
    value -= min1;
    value /= (max1 - min1);
    value *= (max2 - min2);
    value += min2;
    return value;

使用它,我们可以看到我们需要对整个图像做些什么才能让它工作。假设我们从 [low, high] -> [0, 1] 出发,我们可以看到我们只需要从整个图像中减去“low”,然后将其全部除以 (high - low)。这种类型的重构也将推断。

import cv2
import numpy as np

# load images
img = cv2.imread("one.png");

# convert type to float
img = img.astype(np.float32);

# reframe
low = 100;
high = 200;
img -= low;
img /= (high - low);

推荐阅读