web-dev-qa-db-fra.com

TypeError: Argument obligatoire 'mat' (pos 2) introuvable

J'ai le code ci-dessous avec cv2. Ce code est téléchargé depuis https://github.com/dipakkr/3d-cnn-action-recognition . Je veux utiliser cv2.imshow pour visualiser les images de la vidéo qu'il obtient. Mais j'obtiens l'erreur suivante. Quel est le problème? Je doute que ce code soit vraiment capable de lire la vidéo car ce qui est retourné car la sortie est un tableau de zéros.

def video3d(self, filename, color=False, skip=True):

        cap = cv2.VideoCapture(filename)
        #ret, frame=cap.read()
        #cv2.imshow('frame', frame)
        nframe = cap.get(cv2.CAP_PROP_FRAME_COUNT) #Returns the specified VideoCapture property  ,,Number of frames in the video file

        print (nframe, "nframe")

        if skip:
            frames = [x * nframe / self.depth for x in range(self.depth)]
            print (frames, "frameeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeees")

        else:
            frames = [x for x in range(self.depth)]
            print (frames, "frameseeeeeeeeeeeeeeeeeeeeeeeeeeeeeee2")

        framearray = []

        for i in range(self.depth):
            cap.set(cv2.CAP_PROP_POS_FRAMES, frames[i])  #Sets a property in the VideoCapture. ,,0-based index of the frame to be decoded/captured next.
            ret, frame = cap.read()
            cv2.imshow(frame)
            print(ret, "reeeeeeeeeeeeeeeeettttttttt")
            print(frame ,"frame issssssssssss:")
            frame = cv2.resize(frame, (self.height, self.width))
            print(frame, "frame222 isssssssssssssss")
            #cv2.imshow(frame)
            if color:
                framearray.append(frame)
            else:
                framearray.append(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY))

        cap.release()
        return np.array(framearray)


X.append(vid3d.video3d(v_file_path, color=color, skip=skip))

Erreur:

    main()
  File "3dcnn.py", line 151, in main
    args.output, args.color, args.skip)
  File "3dcnn.py", line 103, in loaddata
    X.append(vid3d.video3d(v_file_path, color=color, skip=skip))
  File "/home/gxa131/Documents/final_project_computationalintelligence/3d-cnn-action-recognition/videoto3d.py", line 34, in video3d
    cv2.imshow(frame)
TypeError: Required argument 'mat' (pos 2) not found
2
parvaneh

Le premier argument de cv2.imshow est le nom de la fenêtre, donc il considère la deuxième entrée mat (l'image) comme manquante. Si vous ne voulez pas nommer la fenêtre, vous pouvez simplement donner une chaîne vide comme premier paramètre d'entrée.

cv2.imshow('', frame) 
5
A Kruger

Je sais que cette question est déjà répondue mais j'aimerais y ajouter un générique!

Fondamentalement python à travers cette erreur, quand nous manquons de fournir le 2ème paramètre à la fonction appelée.

Lorsqu'une telle erreur survient, allez au numéro de ligne indiqué en erreur dans la section de sortie et vérifiez que la fonction que vous avez appelée, faites passer tous les paramètres.

0
Shilpa