[英]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.