簡體   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