如何使用python中的opencv选择颜色边界以从图像中的树中检测芒果?

时间:2019-04-30 08:09:09

标签: python opencv image-processing machine-learning computer-vision

我正在尝试从图像中检测和计数一棵树上的芒果。特别是这张图片-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”

所以,我的问题是我如何才能仅从该图像中检测出芒果,需要对我的代码进行哪些修改,这是正确的方法吗?我是该领域的新手,因此,对特定的修改内容将不胜感激。预先感谢。

0 个答案:

没有答案