2015-06-23 65 views
0

我是視頻分析中的半小菜鳥。 我有一個帶有一些彩色液滴的培養皿,我必須檢測它們,並保持它們的位置,面積和顏色的痕跡。Python/OpenCV - 彩色水滴識別和跟蹤

我想首先檢測我的培養皿(可能使用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是結果。

有人有一些建議嗎?我後來可以識別和跟蹤飛沫的建議也受到歡迎。 在此先感謝!

回答

0

它很難想出一個解決方案,沒有太多的想法如何菜實際上看起來像,但我會盡力幫助你反正。

如果問題出在我認爲的問題上,那麼您可能會打開並擴大您的圖像以加入所有不連續的斑點。

執行以下操作,然後再應用霍夫變換:

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的維度以及迭代次數。增加它們中的任何一個都會增加擴張的程度,因此更多的斑點會加入,反之亦然。

+0

非常感謝。我試着添加你建議我的行代碼,但這是結果: http://imageshack.com/a/img538/1489/FSB9aX.png – agroaz

+0

我假設你想要檢測到的圓形爲在你發佈的圖像中的更大的圓圈中。根據圖像,可以肯定的是,培養皿圓將是半徑(或面積)最大的一個。所以你可以沿着這些路線工作。您可以找出最大半徑(或面積)的霍夫圓,並將其用於您的ROI。請忽略我以前的回答....我有一個完全不同的培養皿形象:P – Specas