Opencv4.1 + Windows10 + Python 3.7.5 cv2.VideoCapture ne s'affiche pas correctement

Symptômes

environnement

Opencv

VideoCapture.py


import cv2
 
camera = cv2.VideoCapture(0)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
 
while True:
    ret, frame = camera.read()
    cv2.imshow('camera', frame)
 
    if cv2.waitKey(1) & 0xFF == ord('q'):
        cv2.imwrite("capout.jpg ", frame)
        break
 
camera.release()
cv2.destroyAllWindows()

capout.jpg

Caméra standard Windows

WIN_20191122_16_41_19_Pro.jpg
Avec la caméra standard Windows, lorsque 1080p est sélectionné, l'image est normalement sortie de la caméra Web, mais lors de l'utilisation de la capture vidéo d'Opencv, les deux côtés sont remplis de noir comme indiqué dans l'image de référence, et la résolution elle-même est également étendue. Je sens la rugosité. La fréquence d'images n'augmente pas même si l'appareil photo peut filmer des vidéos à 60 ips en 1080p. (La valeur définie est reflétée dans la fonction get de VideoCapture, mais lorsque la fréquence d'images est réellement mesurée, elle culmine à 30 ips.)

Solution

Un phénomène similaire a été signalé sur le site suivant, j'ai donc essayé la solution et l'ai résolue. OpenCV capturing imagem with black side bars

VideoCapture2.py


import cv2
#Changer la diffusion en DSHOW
camera = cv2.VideoCapture(0, cv2.CAP_DSHOW)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
 
while True:
    ret, frame = camera.read()
    cv2.imshow('camera', frame)
 
    if cv2.waitKey(1) & 0xFF == ord('q'):
        cv2.imwrite("capout.jpg ", frame)
        break
 
camera.release()
cv2.destroyAllWindows()

Cause

Je ne sais pas si la cause directe est un mauvais Windows ou un problème avec la version d'Opencv, mais j'ai pu le résoudre en utilisant un format de streaming appelé Direct SHOW. Veuillez vous référer à l'explication sur Direct SHOW ci-dessous. qiita_directshow Jusqu'à présent, j'ai utilisé la capture vidéo d'Opencv normalement, mais jusqu'à présent (dans un autre environnement), il n'y avait pas de problème avec le streaming par défaut, donc la question demeure. De plus, si nous pouvons confirmer des options qui ne peuvent pas être utilisées ou des retards importants dus à ce changement, nous les ajouterons.

Recommended Posts

Opencv4.1 + Windows10 + Python 3.7.5 cv2.VideoCapture ne s'affiche pas correctement
Virtualenv ne fonctionne pas sur Python 3.5 (Windows)
la version de python ne change pas
Remarques sur l'utilisation d'OpenCV avec Windows10 Python 3.8.3.
[VScode] Le format autopep8 ne fonctionne pas [Python]
Python> Python n'inclut pas le dernier décalage
tensorflow n'entre pas dans windows + anaconda.
Installez OpenCV 4.0 et Python 3.7 sur Windows 10 avec Anaconda
Jinja2 2.9.6 ne fonctionne pas sur la série Lambda Python 3
[Python] Comment installer OpenCV sur Anaconda [Windows]
[Python] Expression (1,2) ne fait pas de taple avec des parenthèses
Les opérations booléennes python ne renvoient pas de valeurs booléennes
Python2.7 + CentOS7 + OpenCV3
Python sur Windows
environnement windows python
Installation de Python (Windows)
Exemples OpenCV (Python)
[Remarque] openCV + python
[Note] Il n'y a pas de copie C ++, Clone dans OpenCV de Python
[Python] L'opérateur booléen (ou / et) ne renvoie pas de valeur booléenne
Entrée clé qui n'attend pas l'entrée clé en Python
[Windows] [Python] Calibrage de la caméra de l'objectif fisheye avec OpenCV
Afficher l'image de la caméra USB avec OpenCV de Python avec Raspeye
Python Open CV a essayé d'afficher l'image sous forme de texte.