【问题标题】:reproduce same output with scikit-image resize and OpenCV resize function使用 scikit-image resize 和 OpenCV resize 函数重现相同的输出
【发布时间】:2020-10-07 01:50:42
【问题描述】:

我正在尝试使用这些 sn-ps 重现相同的输出:

Scikit-Image + Keras

from keras.models import model_from_json
import numpy as np
from skimage.io import imread
from skimage.transform import resize

image = resize(imread(img_path, as_grey=False), (80, 80), preserve_range=True, mode='constant')
image /= 255.
img_array = np.array([image])
pred_IN = model.predict(img_array)

OpenCV

import cv2

model = cv2.dnn.readNet('mynet.prototxt', 'mynet.caffemodel')
image = cv2.imread(image_path)
img = cv2.dnn.blobFromImage(image, scalefactor=(1.0/255.0), size=(80, 80), swapRB=True, crop=False)
model.setInput(img)
pred = model.forward()

问题是我无法将相同的数据传递给网络(OpenCV 的 DNN 模块)。网络相同,输入数据相同,但结果略有不同,原因是 resize 函数在 scikit-learn 和 OpenCV 之间的行为不同(由 blobFromImage 内部使用)并且不知道如何使 OpenCV 代码适应匹配 scikit-learn。 我的最终应用程序将在 C++ 中使用 OpenCV,因此我需要匹配这个 sn-ps,因为我的网络已经使用 scikit-learn 生成的数据进行了训练。

【问题讨论】:

  • 您是否在第一种方法中使用 scikit-image 调整大小功能?
  • 是的,第一种方法是使用 scikit-learn 调整大小功能
  • 请明确包含相关导入;真的是来自scikit-learn 还是(我猜)来自scikit-image?如果需要,相应地调整标签。
  • 抱歉,这是 scikit-image,已编辑
  • 您是否尝试过使用 blobFromImage() 来读取数据而不调整大小,然后使用 cv2.resize() 来调整大小

标签: python opencv keras image-resizing scikit-image


【解决方案1】:

我认为原因是 skimage 默认使用抗锯齿(重新缩放之前来自scipy.ndimage 的高斯模糊)。您可以通过在 cv2.resize 之前模糊图像(例如使用 cv2.GaussianBlur)在 OpenCV 中调整大小来获得类似的结果。调整大小的结果不一样,但使用适当的模糊内核大小非常相似(几乎相同)。希望它会有所帮助:)

【讨论】:

    猜你喜欢
    • 2014-11-21
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多