Lecture centre gravité bulles open CV
Bonjour,
Nous travaillons sur un projet de mécanique des fluides, nous analysons des videos .mov de montée de bulles de champagne, nous avons un code python qui track et affiche grâce a open CV la trajectoire des bulles.
Nous aimerions récupérer le nombre de bulles prises en compte ainsi que leur centre de gravité. Pouvez vous nous aider ?
Voici le code python :
Merci pour votre aide
Nous travaillons sur un projet de mécanique des fluides, nous analysons des videos .mov de montée de bulles de champagne, nous avons un code python qui track et affiche grâce a open CV la trajectoire des bulles.
Nous aimerions récupérer le nombre de bulles prises en compte ainsi que leur centre de gravité. Pouvez vous nous aider ?
Voici le code python :
import numpy as np import cv2 cap = cv2.VideoCapture('/Users/jonbiran/Documents/TER/800.mov') fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('output.avi', fourcc, 25.0, (1280,720)) # params for ShiTomasi corner detection feature_params = dict( maxCorners = 100, qualityLevel = 0.3, minDistance = 7, blockSize = 7 ) # Parameters for lucas kanade optical flow lk_params = dict( winSize = (15,15), maxLevel = 2, criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03)) # Create some random colors color = np.random.randint(0,255,(100,3)) # Take first frame and find corners in it ret, old_frame = cap.read() old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY) p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, **feature_params) # Create a mask image for drawing purposes mask = np.zeros_like(old_frame) while(1): ret,frame = cap.read() frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # calculate optical flow p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params) # Select good points good_new = p1[st==1] good_old = p0[st==1] # draw the tracks for i,(new,old) in enumerate(zip(good_new,good_old)): a,b = new.ravel() c,d = old.ravel() mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2) frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1) img = cv2.add(frame,mask) cv2.imshow('frame',img) k = cv2.waitKey(300) & 0xff if k == 100 : break # Now update the previous frame and previous points old_gray = frame_gray.copy() p0 = good_new.reshape(-1,1,2) cv2.destroyAllWindows() out.release() cap.release()
Merci pour votre aide
A voir également:
- Lecture centre gravité bulles open CV
- Open office gratuit - Télécharger - Suite bureautique
- Open cv - Télécharger - Emploi & CV
- Open core legacy patcher - Accueil - MacOS
- Lecture epub sur pc - Guide
- Centre de messagerie - Guide
2 réponses
Bonjour,
Sans la vidéo c'est difficile de tester et de s'assurer de ce que fait le code, mais j'ai l'impression que le nombre de bulle est juste
Bonne chance
Sans la vidéo c'est difficile de tester et de s'assurer de ce que fait le code, mais j'ai l'impression que le nombre de bulle est juste
len(good_new)et les centres de gravités sont
[new.ravel() for new in good_new].
Bonne chance
Donc nous avons juste a créer deux variables ctr_gravite = [new.ravel() for new in good_new] et nbr_bulle = len(good_new) à la fin du code et d'afficher ces deux variables ?
A chaque fois le code plante vers la fin de la vidéo, ce qui empêche la lecture des variables.