まず花の写真を用意します。 コスモスかな。

二値化
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("flower.jpg")
img = cv2.resize(img, (300, 169))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # gray化
gray = cv2.GaussianBlur(gray, (7, 7), 0) # Gaussianぼかし
im2 = cv2.threshold(gray, 140, 240, cv2.THRESH_BINARY_INV)[1] # threshold閾値処理 グレースケール画像を2値画像化
cv2.imwrite("threshold.png", im2)

GaussianBlurは細かな箇所を抽出しないようにぼかす。
findContoursで輪郭を抽出する。
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("flower.jpg")
img = cv2.resize(img, (300, 169))
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # gray化
gray = cv2.GaussianBlur(gray, (7, 7), 0) # Gaussianぼかし
im2 = cv2.threshold(gray, 140, 240, cv2.THRESH_BINARY_INV)[1] # threshold閾値処理 グレースケール画像を2値画像化
# cv2.imwrite("threshold.png", im2)
cnts = cv2.findContours(im2, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]
for pt in cnts:
x, y, w, h = cv2.boundingRect(pt)
# if w < 30 or w > 200: continue
print(x,y,w,h)
cv2.rectangle(img, (x,y), (x+w, y+h), (0, 255, 0), 2)
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imwrite("find.png", img)
$ python3 app.py
245 91 2 1
182 76 20 18
0 0 300 169

花びらを輪郭にしたかったんですが、雄しべ雌しべが輪郭になってしまいました。
画像を変えてみましょう。


こちらは上手くいきました。
入力値のスクリーニングが鍵やな。