Opencv调整大小改变像素值

Opencv resize changing the Pixel value

在训练 PixelNet 时,我必须先调整具有特定像素值的带注释图像(标签)的大小,然后再调整大小;图像像素具有特定值(带注释的对象),np.unique(image) 给出 [ 0 7 15] 但是,当我使用 openCV 调整图像大小时使其适合我的网络定义时,像素值范围发生变化,其中

image = cv2.resize(image,(cnn_input_size, cnn_input_size),cv2.INTER_NEAREST)

np.unique(bmask)[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]

这对于带有注释标签的训练图像来说是一场灾难,因为这些值是为其他 类 指定的,我想知道这是否是 OpenCV 在调整大小时的预期行为。

使用

image = cv2.resize(image, (cnn_input_size, cnn_input_size), interpolation = cv2.INTER_NEAREST)

image = cv2.resize(image, (cnn_input_size, cnn_input_size), 0, 0, cv2.INTER_NEAREST)

现在您正在为参数 fx(比例 x)使用值 cv2.INTER_NEAREST,并且实际上使用默认插值方法 INTER_LINEAR.

opencv的Nearest-Neighbor-Interpolation函数在数据类型不是UV8时有bug。 您必须将数据拆分为 UV8 类型并按如下方式调整大小和合并它们。

def scale_uint16(img, size):
    img1 = img // 256
    img2 = img % 256
    img1 = cv2.resize(img1.astype('uint8'), size, interpolation=cv2.INTER_NEAREST)
    img2 = cv2.resize(img2.astype('uint8'), size, interpolation=cv2.INTER_NEAREST)
    img3 = img1.astype('uint16') * 256 + img2.astype('uint16')
    return img3