1
votes

Niveaux de gris à RVB - Python

Je ne parviens pas à obtenir une image en niveaux de gris en RVB, voici mon code:

backtorgb = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
cv2.error: /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp:9765: error: (-215) scn == 1 && (dcn == 3 || dcn == 4) in function cvtColor

Cette erreur renvoie:

img=cv2.imread("clahe_2.jpg")
backtorgb = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
showImg(backtorgb,"claheCLR")

Le chemin du fichier est correct. Une suggestion?


2 commentaires

1) Si vous voulez que imread () soit lu en niveaux de gris, vous devez définir l'indicateur sur cv2.IMREAD_GRAYSCALE sur imread () . 2) Si vous souhaitez revenir à une image couleur, sachez qu'OpenCV utilise la commande BGR en général.


Veuillez imprimer img.shape afin que nous puissions voir le nombre de canaux dans l'image.


3 Réponses :


1
votes

Je pense que le problème est que votre image n'est pas en vraie échelle de gris. C'est RVB, mais visible en niveaux de gris. Il faut donc importer une chaîne à partir de l'image, puis exécuter le code:

backtorgb = cv2.cvtColor (img [..., 0], cv2.COLOR_GRAY2RGB)


3 commentaires

Si le problème est que l'image est visible RVB en niveaux de gris, il n'est sûrement pas nécessaire de la convertir en RVB?


Oui. La réponse principale est que les formats d'image tels que * .jpg, * .png ne peuvent pas stocker d'image en niveaux de gris et contiennent toujours des données multicanaux.


Concernant votre dernier commentaire: PNG et JPEG peuvent certainement stocker des images à valeur de gris (monocanal).



0
votes

Par défaut, imread ouvre l'image en tant qu'image BGR à 3 canaux afin que vous n'ayez pas besoin de la convertir, peut-être juste en RVB si c'est ce que vous recherchez.

Consultez la documentation ici


0 commentaires

0
votes

1 commentaires

Y, pas mentionné .. mon mauvais :)