Track 3 SPECIFIC bubble in videostream full of bubbles [closed]

asked 2016-02-13 02:33:39 -0600

Decapitary gravatar image

updated 2016-02-13 09:14:00 -0600

I want to track 3 bubbles in videos(converted to GIF for uploading) like this

and append the x,y in vectors or lists for cv::polylines. I can track if there is ONLY bubble in every frame and draw a track line for it with polylines but when I want to append ALL OF THEM in lists so I can select the bubbles I want, stuff goes WRONG.

I cant append the x and y of a bubble in its own vector.

code is simple but I made A CODE for anyone who needed the obvious code:

   Mat frame,edgeFrame;
    vector<vector<Point>> cnts;
    vector<Vec3i> hie;
    vector<Point2f> XY;
    float r;
    // specific vector for each bubble
    vector<Point> firstBubble,secondBubble,thirdBubble,fourthBubble,millionthBubble;
while(true){
        cap >> frame;
        canny(frame, edgeFrame, 50, 150, 3);
        findContours(edgeFrame, cnts, hie, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

        for(int i = 0 ; i < cnts.size() ; i ++){
         minEnclosingCircle(cnts[i], XY, r);

         circle(frame, XY , r , Scalar(0,0,0), 1 , LINE_AA);

         // append the XY of contour to the specific list
         //AKA the problem

}
}

to be more clear I want to draw from vectors like track lines: the GOal

P.S : one,two,three,four, ... is the name of vector.

this is not the only video that I want to track my bubbles.

bubbles are eggZaklty the same color and shape but the radius is not constant and it can be chaotic

THE BUBBLES CAN MOVE HORIZONTALLY TOO

EDIT: Can I use something "like" optical flow on binary images? what I want is in lk_track in python examples

edit retag flag offensive reopen merge delete

Closed for the following reason the question is answered, right answer was accepted by sturkmen
close date 2020-10-07 12:52:04.306512

Comments

(sparse) optical flow seem to be a good idea here, indeed.

berak gravatar imageberak ( 2016-02-13 09:48:14 -0600 )edit

@berak I cant use that function cuz my frame is binary. and I need center coords.I just dont know how lk_track create a list of lists for cv::polylines

Decapitary gravatar imageDecapitary ( 2016-02-13 10:17:59 -0600 )edit

i don't see, why your image has to be binary (or why this would be an objective), and instead of gfft points you could try to track your center points from findContours ?

berak gravatar imageberak ( 2016-02-13 10:24:56 -0600 )edit

@berak my output frame is from canny and minEnclosingCircle is more accurate than moments to get center coords and radius.my problem is how to append the coords to related list

Decapitary gravatar imageDecapitary ( 2016-02-13 10:44:46 -0600 )edit

yea, i see. i'd think, too, that your way , using Canny -> findContours -> minEnclosingCircle gives you a decent center point, but before the Canny, you had a grayscale image, no ? why not keep that for the optical flow ?

berak gravatar imageberak ( 2016-02-13 10:47:49 -0600 )edit

@berak and then I would have the same problem: how can I add coords of every bubble in specific lists.look at this lk_track . I want to make a list just like self.tracks for polylines

Decapitary gravatar imageDecapitary ( 2016-02-13 10:59:19 -0600 )edit
1

hungarian algorithm

berak gravatar imageberak ( 2016-02-13 11:04:54 -0600 )edit

@berak cool. thank you so much

Decapitary gravatar imageDecapitary ( 2016-02-13 11:23:28 -0600 )edit