This is a simple example in Open CV to find the flowers.
Its with sliders to get the right adjustments.
import cv2
import json
def trackCheck(x):
pass
img = cv2.imread("Test_15.jpg")
r, c, z = img.shape
img = cv2.resize(img, (int(c*0.5), int(r*0.5)))
cv2.namedWindow("Image")
cv2.createTrackbar("High-H", "Image", 0, 255, trackCheck)
cv2.createTrackbar("High-S", "Image", 0, 255, trackCheck)
cv2.createTrackbar("High-V", "Image", 0, 255, trackCheck)
cv2.createTrackbar("Low-H", "Image", 0, 255, trackCheck)
cv2.createTrackbar("Low-S", "Image", 0, 255, trackCheck)
cv2.createTrackbar("Low-V", "Image", 0, 255, trackCheck)
cv2.createTrackbar("Area", "Image", 10, 1000, trackCheck)
while True:
hsvImg = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
orig = img.copy()
highH = cv2.getTrackbarPos("High-H", "Image")
highS = cv2.getTrackbarPos("High-S", "Image")
highV = cv2.getTrackbarPos("High-V", "Image")
lowH = cv2.getTrackbarPos("Low-H", "Image")
lowS = cv2.getTrackbarPos("Low-S", "Image")
lowV = cv2.getTrackbarPos("Low-V", "Image")
targetArea = cv2.getTrackbarPos("Area", "Image")
low = (lowH, lowS, lowV)
high = (highH, highS, highV)
mask = cv2.inRange(hsvImg, low, high)
mask = cv2.dilate(mask, None, iterations=1)
mask = cv2.erode(mask, None, iterations=1)
result = cv2.bitwise_and(img, img, mask=mask)
cnts, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
for cnt in cnts:
area = cv2.contourArea(cnt)
if area>targetArea:
#cv2.drawContours(newEdged, cnt, -1, (0,255,0), 3, 8)
x,y,w,h = cv2.boundingRect(cnt)
newEdged = cv2.rectangle(orig,(x,y),(x+w,y+h),(0,0,255),1)
cv2.imshow("Image1", result)
cv2.imshow("Im", orig)
k = cv2.waitKey(50)
if k == 27:
break