web-dev-qa-db-fra.com

Comment définir une valeur seuil pour détecter uniquement les objets de couleur verte dans une image: Opencv

Je veux juste détecter uniquement les objets verts d'une image capturée en milieu naturel, comment la définir? Parce que ici, je veux passer la valeur de seuil, disons 'x', en utilisant ce x, je veux obtenir uniquement des objets de couleur verte dans une couleur (blanc), les autres doivent apparaître dans une autre couleur (noir) Veuillez me guider pour faire cette. Merci d'avance.

8
S.Am

Mise à jour :

Je crée une palette de couleurs HSV. C'est more easy and accurate Pour trouver la gamme de couleurs en utilisant cette carte qu'auparavant.

Et peut-être que je devrais changer utiliser (40, 40,40) ~ (70, 255,255) in hsv Pour trouver le green.

enter image description here


Réponse originale :

  1. Convertir en HSV espace colorimétrique,
  2. Utilisez cv2.inRange(hsv, hsv_lower, hsv_higher) pour obtenir le masque vert.

Nous utilisons the range (in hsv): (36,0,0) ~ (86,255,255) Pour ce sunflower.


L'image source:

enter image description here

Les régions vertes masquées:

enter image description here

Plus d'étapes:

enter image description here


Le code source principal:

import cv2
import numpy as np

## Read
img = cv2.imread("sunflower.jpg")

## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

## mask of green (36,25,25) ~ (86, 255,255)
# mask = cv2.inRange(hsv, (36, 25, 25), (86, 255,255))
mask = cv2.inRange(hsv, (36, 25, 25), (70, 255,255))

## slice the green
imask = mask>0
green = np.zeros_like(img, np.uint8)
green[imask] = img[imask]

## save 
cv2.imwrite("green.png", green)

Similaire:

  1. Choix des limites HSV supérieures et inférieures correctes pour la détection des couleurs avec`cv :: inRange` (OpenCV)
23
Kinght 金