web-dev-qa-db-fra.com

python: vouloir afficher le canal rouge uniquement en opencv

Je suis débutant en traitement d'image. Je montre l'image dans de nombreux espaces colorimétriques le code ci-dessous montre l'image dans les 3 canaux R G B mais l'image affichée dans la disposition grise. j'ai besoin d'afficher trois images une avec le canal rouge comme image rouge, une autre comme bleu et la dernière comme vert. Merci d'avance.

# 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)

Image bleue telle qu'elle est affichée actuellement

j'ai besoin d'afficher le canal bleu comme cette image

13
Abeer Yosef

Vous pouvez simplement faire une copie de l'image d'origine et régler certains canaux sur 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)
16
Pedro Boechat