Невозможно разделить изображение opencv на RGB

Я пытаюсь разделить изображение на B,G,R, но после разделения у каждого BG и 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. Я даже пробовал это с разными изображениями.


person Bamwani    schedule 19.07.2019    source источник


Ответы (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)
person Solid7    schedule 19.07.2019

При разделении каждое изображение представляет собой одноканальное изображение. Поскольку это одноканальные изображения, при использовании cv2.imshow(g) они выглядят как изображения в градациях серого. Но будьте уверены, каналы разделены правильно.

Часто в изображении BGR каждый канал выглядит почти точно так же, как изображение BGR, и, вероятно, вы запутались.

person Shawn Mathew    schedule 19.07.2019