使用python计数图像中的对象数

时间:2018-08-09 19:25:05

标签: python image-processing

我正在尝试计算这张图片中的对象数量:

image1

我有一个代码:

import cv2
import numpy as np
image = cv2.imread('d:\obj.jpg')
blurred  = cv2.pyrMeanShiftFiltering(image,31,91) 
gray = cv2.cvtColor(blurred,cv2.COLOR_BGR2GRAY)
ret , threshold = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow("Threshold",threshold)
_, contours,_=cv2.findContours(threshold,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
print "Number of contours: %d  "%len(contours)
cv2.drawContours(image,contours,-1,(0,255,255),2)
cv2.namedWindow('Display',cv2.WINDOW_NORMAL)
cv2.imshow('Display',image)
cv2.waitKey()

对象数为9,但输出为1015。

当我尝试显示对象时,这就是我得到的:

processed image

我该如何解决? 感谢所有人:)

1 个答案:

答案 0 :(得分:0)

您可以轻松获得轮廓区域。我建议对轮廓区域设置一个阈值。我的意思是说要遍历所有轮廓,仅保留那些面积大于您指定的number的轮廓,而拒绝其他轮廓。这样可以避免由于噪音而出现小的轮廓。