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.