我一直在细菌的形象下工作,并希望从图像中获取细菌数量,并且还需要对具有特定形状和大小的细菌进行分类。 我正在使用opencv python。现在我使用轮廓法。
'int'
这给出l = 115的输出,li =一些数组值。 这意味着什么?
请帮助我找到答案..下面的大肠图片:
答案 0 :(得分:2)
轮廓连接连续点并将所有点放在一个数组中。因此,此数组中的每个元素可能对应于不同的细菌(或错误检测,因为连接的颜色组是阴影等)。
当您说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
答案 1 :(得分:0)
var nextMonth = addMonths(new Date(), 1);
返回轮廓列表,其中每个轮廓是一个numpy点数组(x,y坐标为2列)。 cv2.findCountours
是列表len(foo)
的长度。因此,在您的情况下,它找到了115个轮廓,而您的foo
只是li
列表的副本。
您可以使用drawContours
function轻松检查轮廓。
contours