web-dev-qa-db-fra.com

Comment convertir une image en niveaux de gris en RVB sous OpenCV (Python) pour visualiser les contours après traitement d’une image en binaire?

J'apprends le traitement d'images en utilisant OpenCV pour une application en temps réel. J'ai créé des seuils sur une image et je souhaite étiqueter les contours en vert, mais ils ne s'affichent pas en vert car mon image est en noir et blanc.

Au début du programme, j’ai utilisé gray = cv2.cvtColor (frame, cv2.COLOR_BGR2GRAY) pour convertir RGB en niveaux de gris, mais pour revenir en arrière, je suis confus, et la fonction backtorgb = cv2.cvtColor (grise, cv2.CV_GRAY2R) donne AttributeError: l'objet 'module' n'a pas d'attribut 'CV_GRAY2RGB'.

Le code ci-dessous ne semble pas dessiner les contours en vert - est-ce parce que c'est une image en niveaux de gris? Si tel est le cas, puis-je reconvertir l'image en niveaux de gris en RVB afin de visualiser les contours en vert?

import numpy as np
import cv2
import time

cap = cv2.VideoCapture(0)
while(cap.isOpened()):

    ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    ret, gb = cv2.threshold(gray,128,255,cv2.THRESH_BINARY)

    gb = cv2.bitwise_not(gb)

    contour,hier = cv2.findContours(gb,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)

    for cnt in contour:
        cv2.drawContours(gb,[cnt],0,255,-1)
    gray = cv2.bitwise_not(gb)

    cv2.drawContours(gray,contour,-1,(0,255,0),3)

    cv2.imshow('test', gray)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
46
user391339

Je fais la promotion de mon commentaire à une réponse:

Le moyen le plus simple est:

Vous pouvez dessiner dans le "cadre" d'origine au lieu d'utiliser une image grise.

La méthode difficile (méthode que vous avez essayé d'implémenter):

backtorgb = cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB) est la syntaxe correcte.

84
Anoop K. Prabhu

Essaye ça:

import cv2
import cv

color_img = cv2.cvtColor(gray_img, cv.CV_GRAY2RGB)

J'ai découvert, en utilisant opencv, que certaines des constantes sont définies dans le module cv2 et d'autres dans le module cv.

8
delicasso

Une fois que vous convertissez votre image en niveaux de gris, vous ne pouvez pas la récupérer. Vous êtes passé de trois canaux à un, lorsque vous essayez de revenir en arrière, les trois chiffres sont identiques. Donc, la réponse courte est non, vous ne pouvez pas revenir en arrière. La raison pour laquelle votre backtorgb fonctionne cette erreur est qu’elle doit avoir le format suivant:

CvtColor(input, output, CV_GRAY2BGR)

OpenCV utilise BGR et non RGB, donc si vous corrigez l'ordre, cela devrait fonctionner, même si votre image sera toujours grise.

5
grromrell