繁体   English   中英

为什么cv2.imread会更改像素值?

[英]why does cv2.imread change the pixel values?

我最近注意到cv2.imread更改了图像的像素值。 我正在进行细分,因此像素值非常重要,因为不同的像素值显示了不同的标签。 我正在使用下面的代码,在这里我的输入图像是蒙版的黑白图像(在Matlab中阅读以确保像素值仅为0和1。)但是当我打印original_mask的像素值时,我看到了像素值已更改,并涉及许多不同的值。 任何帮助是极大的赞赏。 此外,当我打印original_image.shape时,我看到图像是RGB,这意味着具有3个通道(k,k,3)而不是1个通道!

        original_mask = cv2.imread(mask_dir + '/'+lists.iloc[i, 0] + '.png')
        print(original_mask, "original_masklllll")
        print(original_mask.shape, "original_mask")
        resized_mask = cv2.resize(original_mask, (256, 256))
        print(resized_mask.shape, "resized_mask")
        print(resized_mask, "resized_mask")
        print(resized_mask[:, :, 0], "resized_mask[:, :, 0]")

您需要使用cv2.INTER_NEAREST作为调整大小调用的输入。 否则,您将在像素之间插入值,这不是所需的行为。 更多信息在这里

cv2.resize(original_mask, (256,256),interpolation=cv2.INTER_NEAREST)

至于3个通道,它们应该都包含相同的值,因此您可以使用original_mask[...,0]分割单个通道,或者在对cv2.IMREAD_GRAYSCALE的调用中使用cv2.imread

cv2.imread()有一个默认的第二个参数, cv2.imread()参数导致一个3通道图像。 对于单通道源图像,通过

img = cv2.imread(path, cv2.IMREAD_UNCHANGED)

或者,对于任意图像,通过

img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)

将导致一个单一的渠道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM