L'extraction de couleur avec Python + OpenCV a résolu le mystère du fond vert

Objectif

150226-143939-screen-shot.jpg

Je suis désolé pour l'image soudaine de l'oncle Musai.

J'ai essayé, "Puis-je extraire chacune des quatre boules en bois colorées de rouge, jaune, bleu et vert?"

L'histoire de Python et celle d'OpenCV durent environ un mois, alors veuillez souligner mes points faibles (vraiment).

Code de filtre

Ce qui suit est

  1. Éclaircissez les pixels (hTarget) de la teinte spécifiée ( hue)
  2. Niveaux de gris du pixel non applicable (hMask2)

Le code.

filters.py


...

def hueMask(src, dst, hue, hueRange):
    src = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
    h, s, v = cv2.split(src)
    hOrg = h.copy()
    hTarget = h.copy()

    cv2.threshold(hTarget, hue + hueRange, hue, cv2.THRESH_TOZERO_INV, hTarget)
    # 「src(x,y)Si est supérieur au seuil, dst(x,y)vaut 0 "

    # 0
    # 0
    # 0
    # thresh
    # src
    # src
    # src
    # src
    # src

    cv2.threshold(hTarget, hue - hueRange, hue, cv2.THRESH_BINARY, hTarget)
    # 「src(x,y)Si est inférieur au seuil, dst(x,y)vaut 0 "

    # 0(src)
    # 0(src)
    # 0(src)
    # src
    # src
    # thresh
    # 0
    # 0
    # 0

    #résultat

    # 0
    # 0
    # 0
    # thresh
    # src
    # thresh
    # 0
    # 0
    # 0

    #Pour exclure la lumière fluorescente (jaune) et les cheveux (bleu)
    #Exclure les pixels extrêmement désaturés de la plage cible
    sNotVeryLow = s.copy() #Où la saturation n'est pas extrêmement faible
    #Si la saturation est supérieure à 31, placez-la dans la plage cible (255).
    #Sinon, la plage non cible (0).
    cv2.threshold(sNotVeryLow, 31, 255, cv2.THRESH_BINARY, sNotVeryLow)

    #Le produit logique de hTarget et vNotHighlight est le nouveau hTarget
    cv2.bitwise_and(hTarget, vNotVeryLow, hTarget)

    #Faites une copie de l'image de luminosité.
    vBrightened = v.copy()
    #en plus+Appliquez une correction gamma 96 pour le rendre plus lumineux
    cv2.addWeighted(v, 0.625, v, 0.0, 96, vBrightened)
    #Insérez une image de luminosité corrigée gamma uniquement dans la plage cible de l'image de luminosité
    cv2.bitwise_and(vBrightened, 255, v, hTarget)

    hMask2 = h.copy()
    #Lorsque le pixel correspondant de hTarget (1 image de canal) est 0
    #Définissez le pixel correspondant de hMask2 (image 1 canal) sur 255.
    #Sinon, réglez-le sur 0.
    #En bref, hMask2 est une version inversée de l'image du masque hTarget.
    cv2.compare(hTarget, 0, cv2.CMP_EQ, hMask2)

    cv2.bitwise_and(s, 0, s, hMask2) #ET logique

    cv2.merge((hOrg, s, v), src)
    cv2.cvtColor(src, cv2.COLOR_HSV2BGR, dst)

...

D'une manière ou d'une autre, le nom de la variable est sale, mais ... Vous pouvez maintenant extraire n'importe quelle teinte.

Code d'application

Ensuite, essayez d'extraire quatre couleurs, c'est-à-dire les teintes de rouge, jaune, bleu et vert.

App.py


...
class App(object):
    def __init__(self):
        ...
        self._shouldHueMask                = False
        ...
    def run(self):
        ...
        while self._windowManager.isWindowCreated:
            ...
            if self._shouldHueMask:
                filters.hueMask(frame, frame, self._hue, self._hueRange)
            ...
    def onKeypress(self, keycode):
        ...
        elif keycode == ord('B'): #Bleu
            self._hue      = 110
            self._hueRange = 10
            self._shouldHueMask = \
                not self._shouldHueMask
        elif keycode == ord('G'): #vert
            self._hue      = 70
            self._hueRange = 25
            self._shouldHueMask = \
                not self._shouldHueMask
        elif keycode == ord('R'): #rouge
            self._hue      = 5
            self._hueRange = 5
            self._shouldHueMask = \
                not self._shouldHueMask
        elif keycode == ord('Y'): #Jaune
            self._hue      = 30
            self._hueRange = 15
            self._shouldHueMask = \
                not self._shouldHueMask
        ...
if __name__=="__main__":
    App().run()

La valeur de la teinte et la largeur de chacun des rouges, jaunes, bleus et verts ont été décidées après essais et erreurs.

résultat

rouge

150226-144313-screen-shot.jpg

Eh bien, il semble que la couleur de la peau ait réagi à "l'extraction du rouge". Avec cela, il n'est pas possible d'extraire la boule de bois "seulement".

Jaune

150226-144702-screen-shot.jpg

Eh bien, cette fois, le plafond a réagi à «l'extraction jaune».

Bleu

150226-144944-screen-shot.jpg

Cette fois, les cheveux et le pull noir ont réagi à "l'extraction bleue".

vert

150226-145207-screen-shot.jpg

J'ai pu extraire les boules de bois de la plus belle manière.

Lors de la synthèse d'images, vous vous tenez devant un tissu vert appelé fond vert. Il y a une raison pour laquelle c'était vert.

La raison pour laquelle le vert est apaisant peut être que les yeux se sentent à l'aise avec de nouveaux stimuli, contrairement aux couleurs qui apparaissent dans la vie quotidienne.

C'est peut-être pour ça que le tableau noir est vert?

Je vais mettre le pinceau dessus, laissant place à la discussion.


Je blogue: Weed.nagoya

Recommended Posts

L'extraction de couleur avec Python + OpenCV a résolu le mystère du fond vert
Remplissez l'arrière-plan d'une seule couleur avec OpenCV2 + Python
Mathématiques Todai 2016 résolues avec Python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
Estimer la posture du marqueur AR avec Python + OpenCV + drone
Etude de base d'OpenCV avec Python
Vérifier l'existence du fichier avec python
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Obtenez et estimez la forme de la tête en utilisant Dlib et OpenCV avec python
Essayez de séparer l'arrière-plan et l'objet en mouvement de la vidéo avec OpenCV
J'ai essayé de "lisser" l'image avec Python + OpenCV
Comparaison des performances du détecteur de visage avec Python + OpenCV
Extraction de bords avec python + OpenCV (filtre Sobel, filtre laplacien)
[Note] Exportez le html du site avec python.
Calculez le nombre total de combinaisons avec python
Vérifiez la date du devoir de drapeau avec Python
J'ai essayé de "binariser" l'image avec Python + OpenCV
Le moyen le plus simple d'utiliser OpenCV avec python
Convertir le code de caractère du fichier avec Python3
[Python] Déterminez le type d'iris avec SVM
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
Extraire le tableau des fichiers image avec OneDrive et Python
Apprenez Nim avec Python (dès le début de l'année).
Binarisation avec OpenCV / Python
Détruire l'expression intermédiaire de la méthode sweep avec Python
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
[Python] Changer la couleur du texte et la couleur d'arrière-plan d'un mot clé spécifique dans la sortie d'impression
Essayez de projeter la conversion d'image en utilisant OpenCV avec Python
le zen de Python
Visualisez la gamme d'insertions internes et externes avec python
Calculer le coefficient de régression d'une analyse de régression simple avec python
Ecrire des caractères dans l'illustration de la carte avec OpenCV python
Résumé du flux de base de l'apprentissage automatique avec Python
[Python] Résumé de la façon de spécifier la couleur de la figure
Obtenez l'état de fonctionnement de JR West avec Python
[Windows] [Python] Calibrage de la caméra de l'objectif fisheye avec OpenCV
Visualisez le statut d'appréciation des œuvres d'art avec OpenCV
Note Python: Le mystère de l'attribution d'une variable à une variable
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
J'ai essayé de trouver l'entropie de l'image avec python
Essayez de gratter les données COVID-19 Tokyo avec Python
L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python
Unifier l'environnement de l'équipe de développement Python en commençant par Poetry
Visualisez les résultats des arbres de décision réalisés avec Python scikit-learn
Calculez des millions de chiffres dans la racine carrée de 2 avec python
J'ai écrit la grammaire de base de Python dans Jupyter Lab
Exécutez l'intelligence de votre propre bibliothèque python avec VScode.
J'ai évalué la stratégie de négociation du système boursier avec Python.
Touchons l'API de Netatmo Weather Station avec Python. #Python #Netatmo
Détecter les objets d'une couleur et d'une taille spécifiques avec Python
L'histoire de l'affichage d'images avec OpenCV ou PIL (uniquement)
L'histoire du rubyiste aux prises avec Python :: Dict data with pycall
[Homologie] Comptez le nombre de trous dans les données avec Python
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Réécrivez le nœud d'ajout d'enregistrement de SPSS Modeler avec Python.
Jouez avec le mécanisme de mot de passe de GitHub Webhook et Python
[Python] Lecture facile des fichiers image du numéro de série avec OpenCV