簡體   English   中英

灰度圖像的 OpenCV 讀取返回 3 通道(顏色?)數組而不是單通道

[英]OpenCV imread of grayscale image returns 3-channel (color?) array instead of single-channel

我有以下 python function 下面將圖像和噪聲系數作為輸入參數,以便轉換為噪聲的總像素的百分比與系數成正比(表示為噪聲矩陣)。 然后將該噪聲矩陣與原始圖像相乘以獲得噪聲圖像。

def dot_salt_pepper(img, noise_coeff):
    height = img.shape[0]
    width = img.shape[1]
    noise_matrix = np.ones([height, width])
    num_noise_pixels = int(height * width * noise_coeff)
    
    for i in range(num_noise_pixels):
        noise_matrix[np.random.randint(height)][np.random.randint(width)] = 0
        
    new_img = np.multiply(img, noise_matrix)
    new_img = np.uint8(img)
    
    return new_img

我知道為了給現有圖像添加點噪聲,必須首先將圖像轉換為灰度。 然而,我正在使用的圖像是灰度格式的,因此當我使用cv2.imread('img.jpg')在 OpenCV 中讀取它時,調用print(img.shape)輸出元組(3000, 4000, 3)這表明BGR 通道仍然存在於圖像中(因此我不能將 2D 噪聲矩陣乘以 3D 圖像矩陣)。 我如何解決這個問題?

這是有問題的圖像

圖像是 RGB 數據類型,即使它沒有顏色
轉換為灰度

這可以在讀取圖像cv2.imread(IMAGE_FILE, cv2.IMREAD_GRAYSCALE)

您提供的 JPEG 文件是 grayscale ,而不是 RGB。

imread始終轉換為 BGR,除非您傳遞一些標志。

傳遞IMREAD_UNCHANGED標志以准確獲取文件中的內容。 這將適用於您的文件,因為它是灰度的。

傳遞IMREAD_GRAYSCALE強制轉換為灰色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM