How to define a threshold value to detect only green colour objects in an image :Opencv [duplicate]
Update:
I make a HSV
colormap. It's more easy and accurate
to find the color range using this map than before.
And maybe I should change use (40, 40,40) ~ (70, 255,255) in hsv
to find the green
.
Original answer:
- Convert to
HSV
color-space, - Use
cv2.inRange(hsv, hsv_lower, hsv_higher)
to get the green mask.
We use the range (in hsv)
: (36,0,0) ~ (86,255,255)
for this sunflower
.
The source image:
The masked green regions:
More steps:
The core source code:
import cv2import numpy as np## Readimg = cv2.imread("sunflower.jpg")## convert to hsvhsv = 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 greenimask = mask>0green = np.zeros_like(img, np.uint8)green[imask] = img[imask]## save cv2.imwrite("green.png", green)
Similar: