无法将OpenCV图像分割为RGB。

3

我想把一张图片分成 B,G,R 三个通道,但是分割后每个通道都变成了灰度图像。

import cv2
import numpy as np

image = cv2.imread('/path/image.jpg') #I have tried using CV_LOAD_IMAGE_COLOR flag as well as 1
#however,image is read as color image. It is not a grayscale image

b,g,r = cv2.split(image)
#[b,g,r]=np.dsplit(image,image.shape[-1])
#b,g,r = cv2.split(image)
#b = image[:,:,0]
#g = image[:,:,1]
#r = image[:,:,2]

#none of the above worked

cv2.imshow("green",g)
cv2.waitKey(0)
cv2.destroyAllWindows()

请帮我将图像分成BGR通道。我甚至尝试了不同的图像。
2个回答

2
在拆分后,每个图像都是单通道图像。由于它们是单通道图像,当您使用cv2.imshow(g)时,它们看起来像灰度图像。但请放心,通道已正确拆分。
通常,在BGR图像中,每个通道看起来几乎与BGR图像完全相同,这可能是您感到困惑的原因。
最初的回答:在拆分后,每个图像都是单通道图像。由于它们是单通道图像,当您使用cv2.imshow(g)时,它们看起来像灰度图像。但请放心,通道已正确拆分。通常,在BGR图像中,每个通道看起来几乎与BGR图像完全相同,这可能是您感到困惑的原因。

2
你正在向imshow发送一个通道。绿色的通道将以灰度显示。你需要做的是发送一个红色和蓝色通道都为零的图像,以便将其“看作”绿色。
当分离通道时,你正在正确操作,你有红、绿和蓝三个通道。问题在于显示代码让你感到困惑,并将绿色通道显示为灰度。
    import numpy as np
    import cv2

    image = np.random.rand(200, 200, 3)
    b, g, r = cv2.split(image)
    cv2.imshow('green', g)
    cv2.waitKey(0)

    black = np.zeros((200, 200, 3))
    black[:, :, 1] = g # Set only green channel
    cv2.imshow('green', black)
    cv2.waitKey(0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接