J'aimerai pouvoir détecter une forme géométrique (rond blanc) dans une vidéo.
Le but est de pouvoir compter le nombre de rond blanc et de connaitre la position de chaque rond.
Cependant, je ne sais pas du tout comment m'y prendre. Les ronds apparaissent au fur et à mesure, je peux peut être découper la vidéo en image et donc comparer l'image n avec l'image n+1 pour savoir où est apparut le rond.
import numpy as np
import cv2
import matplotlib.pyplot as plt
cox = []
coy = []
txt = 'C:\\txt.txt'
for i in range(0,2759):
cotempx = []
cotempy = []
a = str(i+1)
print(a)
lien = 'C:\\image ('+a+').jpg'
image1 = cv2.imread(lien)
i = str(i+2)
print(i)
lien = 'C:\\image ('+i+').jpg'
image2 = cv2.imread(lien)
if image1 is None or image2 is None:
print("Erreur lors du chargement des images.")
exit()
difference = cv2.absdiff(image1, image2)
grayscale_diff = cv2.cvtColor(difference, cv2.COLOR_BGR2GRAY)
_, threshold_diff = cv2.threshold(grayscale_diff, 30, 255, cv2.THRESH_BINARY)
# Trouver les coordonnées des pixels où il y a une différence significative
coordinates = np.column_stack(np.where(threshold_diff > 0))
cotempx.append(0)
cotempy.append(0)
#cv2.imshow('Difference', threshold_diff)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
for coord in coordinates:
cotempx = []
cotempy = []
print(coord)
x, y = coord
#print(f"Différence détectée à la position (x: {x}, y: {y})")
print(x,y)
cotempx.append(x)
cotempy.append(y)
if cotempx[0] == 0:
print("0")
else :
cv2.imshow('Difference', threshold_diff)
cv2.waitKey(0)
cv2.destroyAllWindows()
cox.append(cotempx[0])
coy.append(cotempy[0])
with open(txt, 'a') as file1:
file1.write(str(cotempx[0]))
file1.write(";")
file1.write(str(cotempy[0]))
file1.write('\n')
print(cox)
print(coy)
plt.title("Fente d'Young")
plt.plot(coy, cox,"g^")
plt.xlabel('x')
plt.ylabel('y')
plt.show()
Et voici le code pour découper la vidéo en plusieurs images :
video_path = 'C:/video.mp4'
cap = cv2.VideoCapture(video_path)
print("a")
if not cap.isOpened():
print("Erreur lors de l'ouverture de la vidéo.")
exit()
# Créer un dossier pour enregistrer les images
output_folder = 'C:\\1'
import os
if not os.path.exists(output_folder):
os.makedirs(output_folder)
frame_count = 0
while True:
ret, frame = cap.read()
if not ret:
break
roi = frame[:-12, :]
# Enregistrer l'image dans le dossier de sortie
output_path = os.path.join(output_folder, f'frame_{frame_count:04d}.jpg')
cv2.imwrite(output_path, roi)
frame_count += 1
cv2.imshow('Frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
- Edité par Gérald Starkss 24 août 2023 à 19:28:19
Détecter une forme simple sur une vidéo
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Python c'est bon, mangez-en.