我一直在细菌的图像下工作,并希望从图像中获取细菌的数量,还需要对特定形状和大小的细菌进行分类。我正在使用opencv python。现在我使用轮廓线方法。
contours,hierarchy = cv2.findContours(dst,1,2)
cnt = contours[0]
l = len(contours)
print l
li = list(contours)
print li这给出了l= 115和li=一些数组值的输出。这是什么意思??
请帮我找出下面的answer..e.coli镜像:

发布于 2016-03-31 19:04:22
轮廓连接连续点,并将所有这些点放入一个数组中。因此,这个阵列中的每个元素可能对应于不同的细菌(或错误检测,由于连接的颜色组是阴影等)。
当您说len(contours)时,您将获得此数组中元素的数量。因此,你可以粗略估计出细菌的数量。
在你的案例中,有115种细菌,或者颜色与周围环境不同,这可能是也可能不是细菌。当您为它们定义一个列表并打印该列表时,您将获得该列表中每个元素的属性,因此您将获得每个“连接点编组”或每个“可能是细菌的对象”的属性。一切都很简单,真的。
如果你意识到这里有很多错误的检测,你会这么做:
设置图像阈值(将其转换为黑白图像),然后首先使用erode函数。然后使用dilate函数删除它们的连接。然后再一次使用findContours。
被检测为细菌的
让你的阈值只覆盖细菌的颜色范围,这样其他的一切都会被忽略。
请参阅下面的资源,它们可能会有所帮助:
http://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html
http://docs.opencv.org/trunk/d4/d73/tutorial_py_contours_begin.html#gsc.tab=0
发布于 2016-03-31 19:01:04
cv2.findCountours返回一个等高线列表,其中每个等高线都是一个点数组( x,y坐标为2列)。len(foo)为list foo的长度。所以在你的例子中,它找到了115个轮廓,而你的li只是contours列表的一个副本。
您可以使用drawContours function轻松地检查等高线。
# draws contours in white color, outlines only (not filled)
cv2.drawContours(dst, contours, -1, (255,))
cv2.imshow("result", dst)
cv2.waitKey(-1)https://stackoverflow.com/questions/36331427
复制相似问题