Opencv调整大小更改像素值

时间:2017-06-28 07:46:14

标签: python-2.7 deep-learning image-resizing opencv3.0 pixels

在训练PixelNet时,我需要在调整大小之前调整具有特定像素值的带注释图像(标签)的大小;图像像素具有特定值(带注释的对象),np.unique(image)给出{{1} }} 但是,当我使用openCV调整图像大小以使其适合我的网络定义时,像素值范围会发生变化,其中

[ 0  7 15]

image = cv2.resize(image,(cnn_input_size, cnn_input_size),cv2.INTER_NEAREST)  给 np.unique(bmask)

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

2 个答案:

答案 0 :(得分:5)

使用

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)

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

答案 1 :(得分:1)

当数据类型不是 UV8 时,最近邻插值的opencv功能存在错误。 您必须将数据拆分为 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