【问题标题】:python: want to display red channel only in opencvpython:只想在opencv中显示红色通道
【发布时间】:2023-04-05 01:08:01
【问题描述】:

我是图像处理的初学者。我在许多颜色空间中显示图像,下面的代码显示 3 通道 R G B 中的图像,但是图像以灰色布局显示。我需要显示三个图像,一个红色通道为红色图像,另一个为蓝色,最后一个为绿色。提前致谢。

# cspace.py
import cv2
import numpy as np

image = cv2.imread('download.jpg')

# Convert BGR to HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
hsl = cv2.cvtColor(image, cv2.COLOR_BGR2HLS) # equal to HSL
luv = cv2.cvtColor(image, cv2.COLOR_BGR2LUV)


#RGB - Blue
cv2.imshow('B-RGB.jpg',image[:, :, 0])
cv2.imwrite('B-RGB.jpg',image[:, :, 0])

# RGB - Green
cv2.imshow('G-RGB',image[:, :, 1])
cv2.imwrite('G-RGB.jpg',image[:, :, 1])

# RGB Red
cv2.imshow('R-RGB',image[:, :, 2])
cv2.imwrite('R-RGB.jpg',image[:, :, 2])


cv2.waitKey(0)

Blue image as displayed currently

i need to display blue channel like this image

【问题讨论】:

    标签: python opencv image-processing computer-vision


    【解决方案1】:

    您可以只复制原始图像并将一些通道设置为 0。

    import cv2
    
    image = cv2.imread('download.jpg')
    
    b = image.copy()
    # set green and red channels to 0
    b[:, :, 1] = 0
    b[:, :, 2] = 0
    
    
    g = image.copy()
    # set blue and red channels to 0
    g[:, :, 0] = 0
    g[:, :, 2] = 0
    
    r = image.copy()
    # set blue and green channels to 0
    r[:, :, 0] = 0
    r[:, :, 1] = 0
    
    
    # RGB - Blue
    cv2.imshow('B-RGB', b)
    
    # RGB - Green
    cv2.imshow('G-RGB', g)
    
    # RGB - Red
    cv2.imshow('R-RGB', r)
    
    cv2.waitKey(0)
    

    【讨论】:

    • 这可行,但我不禁觉得有一个更优雅的解决方案,只需指定 cmap
    • @information_interchange tbh 这个解决方案的可读性使它非常优雅。
    【解决方案2】:
    import cv2
    import numpy as np
    
    channel_initials = list('BGR')
    
    image = cv2.imread('download.jpg')
    
    for channel_index in range(3):
        channel = np.zeros(shape=image.shape, dtype=np.uint8)
        channel[:,:,channel_index] = image[:,:,channel_index]
        cv2.imshow(f'{channel_initials[channel_index]}-RGB', channel)
    cv2.waitKey(0)
    

    【讨论】: