【问题标题】:Python/OpenCV - Colored Droplets Recognition and TrackingPython/OpenCV - 彩色液滴识别和跟踪
【发布时间】:2015-06-23 15:10:01
【问题描述】:

我是视频分析领域的半新手。 我有一个培养皿,里面有一些彩色液滴,我必须检测它们,并跟踪它们的位置、面积和颜色。

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

问题是小米菜检测很“吵”:程序检测到很多圈(我只需要与菜对应的那个),它从来没有检测到正确的。

这是我的代码:

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 就是结果。

有人有什么建议吗?也欢迎就我以后识别和跟踪液滴的方式提出建议。 提前致谢!

【问题讨论】:

    标签: python opencv tracking


    【解决方案1】:

    如果不知道这道菜的实际样子,很难想出一个解决方案,但无论如何我都会尽力帮助你。

    如果问题是我认为的那样,那么您可能可以打开并放大您的图像以加入所有不连续的斑点。

    在应用霍夫变换之前执行以下操作:

    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 的尺寸以及迭代次数。增加其中任何一个都会增加膨胀程度,因此更多的 blob 会连接起来,反之亦然。

    【讨论】:

    • 非常感谢。我尝试添加您建议我的行代码,但结果如下:imageshack.com/a/img538/1489/FSB9aX.png
    • 我假设您想检测圆圈,就像您发布的问题图片中的较大圆圈一样。根据图像,可以肯定培养皿圈是半径(或面积)最大的圈。所以你可以沿着这些思路工作。您可以找出半径(或面积)最大的霍夫圆,并将其用于您的投资回报率。请忽略我之前的回答....我脑海中对培养皿的印象完全不同:P
    猜你喜欢
    • 2021-11-27
    • 2012-03-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2019-12-07
    相关资源
    最近更新 更多