为什么 opencv.dnn.blobFromImage() 输出转换回 RGB 图像包含灰度 9 个图像?

问题描述 投票:0回答:1

大家好,有个问题想问一下。 据我了解 blobFromImage 将 img 形状:(宽度,高度,通道)转换为 4d 数组(n,通道,宽度,高度)。 所以如果你传递的scale_factor为1/255。 | size (640,640) 据我所知,每个元素应该计算为 RGB => R = R/255。 | G=G/255。 |...

Value = (U8 - Mean) * scale_factor

基本上 minmax 归一化在 0 到 1 之间。 等等。 我尝试将输出 blob/ ndarray * 255 相乘,然后重新整形为 (640, 640, 3),看起来输出图像是一张包含 3 行和 3 列灰度图像且饱和度略有不同的 9 个图像的图像?这就是我在 255 边尝试过的。上面的示例具有相同的输出。

    test = cv2.dnn.blobFromImage(img, 1.0/127.5, (640, 640), (127.5, 127.5, 127.5), swapRB=True)
    t1 = test * 127.5
    t2 = t1 + 127.5
    cv2.imwrite("./test_output.jpg", t2.reshape((640, 640, 3)))

我一直在浏览他们的 opencv 存储库

        subtract(images[i], mean, images[i]);
        multiply(images[i], scalefactor, images[i]);

老实说,看起来像在 opencv lib 中以相同的方式实现,但想请教大家对此的意见。 另一个问题是,如果输入是完整的 u8 rgb 值,为什么会变成灰度?

我尝试通过应用类似的公式将 4d ndarray 转换为匹配 blobFromImage 的输出。但输出不一样。 我希望转换为 (1, 3, w, h) 的 ndarray 的图像减去平均值并乘以比例因子,当您转换回 (宽度, 高度, 通道) 时,与 blobFromImage 的输出相同。

python numpy opencv machine-learning computer-vision
1个回答
0
投票

当您尝试排列/转置维度(NHWC 与 NCHW)时,重塑会混淆数据。

而是在 numpy 数组上使用

np.transpose()
。这将重新排序维度而不会混淆数据。

© www.soinside.com 2019 - 2024. All rights reserved.