我正在尝试从图像中检测和计数一棵树上的芒果。特别是这张图片-https://imgur.com/a/FrY5wkV“一棵树上的芒果”。
所以,我正在python中使用OpenCV来做到这一点。但是我没有得到预期的结果,我认为主要问题是无法选择将芒果分类的颜色边界。
我已经尝试使用颜色选择器多次更改RGB的较高边界,以识别芒果,但是代码检测到所有绿色材料,包括草,树叶等。这是我的代码-
import cv2
import numpy as np
#cam= cv2.VideoCapture(0)
kernelOpen=np.ones((5,5))
kernelClose=np.ones((20,20))
font = cv2.FONT_HERSHEY_SIMPLEX
while True:
img = cv2.imread("C:/Users/Talha/Desktop/bigmango1.jpg")
#img=cv2.resize(img,(340,220))
#convert BGR to HSV
imgHSV= cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# create the Mask
mask=cv2.inRange(imgHSV, (36,25,50), (237, 229, 148))
#morphology
maskOpen=cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernelOpen)
maskClose=cv2.morphologyEx(maskOpen,cv2.MORPH_CLOSE,kernelClose)
maskFinal=maskClose
_,conts,h=cv2.findContours(maskFinal.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
cv2.drawContours(img,conts,-1,(255,0,0),1)
for i in range(len(conts)):
x,y,w,h=cv2.boundingRect(conts[i])
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255), 2)
cv2.putText(img, str(i+1),(x,y+h),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,255,0))
cv2.imshow("maskOpeng",maskOpen)
cv2.imshow("camg",img)
cv2.waitKey(0)
if cv2.waitKey(10) &0xFF ==ord('q'):
cap.release()
cv2.destroyAllWindows()
break
我得到的结果是这张图片-https://imgur.com/a/J2DsFB8“伪装”
还有-https://imgur.com/a/i9LGIFh“ maskOpeng”
所以,我的问题是我如何才能仅从该图像中检测出芒果,需要对我的代码进行哪些修改,这是正确的方法吗?我是该领域的新手,因此,对特定的修改内容将不胜感激。预先感谢。