Partage
  • Partager sur Facebook
  • Partager sur Twitter

Détecter une forme simple sur une vidéo

Sujet résolu
    23 août 2023 à 12:46:43

    Bonjour,

    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. 

    Voici la vidéo en question : https://iopscience.iop.org/article/10.1088/1367-2630/15/3/033018/data  (movie 2)

    Merci beaucoup pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      23 août 2023 à 18:23:00

      Ceux sont des ronds de même couleur , même diamètre ?

      -
      Edité par josmiley 23 août 2023 à 18:23:21

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        23 août 2023 à 18:32:38

        Gérald Starkss a écrit:

        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.


        Peut être que vous gagneriez à voir ce qu'on peut faire avec OpenCV pour ce traitement d'images.
        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2023 à 21:42:45


          Ejosmiley a écrit:

          Ceux sont des ronds de même couleur , même diamètre ?

          -
          Edité par josmiley il y a environ 3 heures


          Oui tous les mêmes, sur un fond noir. Ils apparaissent petit à petit. Le plus simple serait peut être de comparer deux images

          mps a écrit:

          Gérald Starkss a écrit:

          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.


          Peut être que vous gagneriez à voir ce qu'on peut faire avec OpenCV pour ce traitement d'images.

          Très bien merci, je vais voir ce que je peux faire avec OpenCV !

          -------------------EDIT---------------------------

          J'ai finalement trouvé, merci à toi @mps. 

          Pour les curieux, voici le code :

          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

          • Partager sur Facebook
          • Partager sur Twitter

          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.
          • Editeur
          • Markdown