Python / OpenCV - 彩色水滴识别和跟踪

时间:2015-06-23 15:10:01

标签: python opencv tracking

我是视频分析中的半菜鸟。 我有一个带有一些彩色水滴的培养皿,我必须检测它们,并记录它们的位置,面积和颜色。

我想首先检测我的培养皿(可能使用HoughCircles)并定义一个后期工作的ROI。

问题是,mi碟检测非常“嘈杂”:程序检测到很多圈子(我只需要一个与碟子相对应的圈子),它永远不会检测到正确的圈子。

这是我的代码:

import cv2
import numpy as np

def main():
    cap=cv2.VideoCapture("dropletsS.wmv")
    cv2.namedWindow("prova")
    while(1):
        ret, RGBframe = cap.read()
        grayFrame = cv2.cvtColor(RGBframe,cv2.COLOR_BGR2GRAY)
        grayFrame=cv2.medianBlur(grayFrame,7)
        circles=cv2.HoughCircles(grayFrame,cv2.HOUGH_GRADIENT ,50,50)
        for c in circles[0,:]:
            cv2.circle(RGBframe,(c[0],c[1]),c[2],(0,255,0),2)

        cv2.imshow("prova", RGBframe)
        cv2.imshow("grigio", grayFrame)
        cv2.waitKey(10)

if __name__ == "__main__":
    main()

结果是here

有人有一些建议吗?关于我以后识别和跟踪飞沫的方式的建议也是受欢迎的。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

很难想出一个解决方案而没有太多关于这道菜的实际看法的想法,但我会尝试帮助你。

如果问题出现在我认为的问题上,那么您可以打开并扩大图像以加入所有不连续的斑点。

在应用Hough Transform之前执行以下操作:

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5)) #declare outside while

grayFrame = cv2.morphologyEx(grayFrame, cv2.MORPH_OPEN, kernel)
grayFrame = cv2.dilate(grayFrame, kernel, iterations = 2)

如果输出是您想要的输出图像,请告诉我。还可以使用参数来获得所需的结果。您可以更改MORPH_ELLIPSE的尺寸以及迭代次数。增加它们中的任何一个都会增加膨胀程度,因此更多的斑点会加入,反之亦然。