Réglage des Paramètres de la Caméra dans OpenCV/Python
Je suis en utilisant OpenCV (2.4) et Python (2.7.3) avec une caméra USB de Thorlabs (DC1545M).
Je suis en train de faire d'analyse d'image sur un flux vidéo et je voudrais être en mesure de modifier certains des paramètres de la caméra à partir de mon flux vidéo. La confusion, c'est que je suis en mesure de modifier certaines des propriétés de l'appareil photo, mais pas tous d'entre eux, et je ne suis pas sûr de ce que je fais de mal.
Voici le code, à l'aide de la cv2 liaisons en Python, et je peux confirmer qu'il fonctionne:
import cv2
#capture from camera at location 0
cap = cv2.VideoCapture(0)
#set the width and height, and UNSUCCESSFULLY set the exposure time
cap.set(3,1280)
cap.set(4,1024)
cap.set(15, 0.1)
while True:
ret, img = cap.read()
cv2.imshow("input", img)
#cv2.imshow("thresholded", imgray*thresh2)
key = cv2.waitKey(10)
if key == 27:
break
cv2.destroyAllWindows()
cv2.VideoCapture(0).release()
Pour référence, le premier argument dans la de la pac.set() de commande se réfère à l'énumération des propriétés de l'appareil photo, énumérés ci-dessous:
0. CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.
1. CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
2. CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file
3. CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
4. CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
5. CV_CAP_PROP_FPS Frame rate.
6. CV_CAP_PROP_FOURCC 4-character code of codec.
7. CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
8. CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .
9. CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
10. CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
11. CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
12. CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
13. CV_CAP_PROP_HUE Hue of the image (only for cameras).
14. CV_CAP_PROP_GAIN Gain of the image (only for cameras).
15. CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
16. CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
17. CV_CAP_PROP_WHITE_BALANCE Currently unsupported
18. CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)
Mes questions sont:
Est-il possible de mettre la caméra le temps d'exposition (ou les autres paramètres de la caméra) via python/opencv?
Si non, comment pourrais-je aller sur la configuration de ces paramètres?
Remarque: Il est le C++, le code fourni par le fabricant de la caméra montrant comment le faire, mais je ne suis pas un expert (par un long shot) en C++ et vous serions reconnaissants de tout basé sur python solution.
Merci d'avance!
- Quel est donc le 15e option, c'est à dire CV_CAP_PROP_EXPOSURE ? N'est-il pas temps d'exposition?
- Il est. Le point que je faisais, c'est que d'essayer de modifier qui ne produisent aucun résultat mesurable. (c'est la
cap.set(15, x)
, où aucune valeur dex
produit un changement mesurable.) En passant, merci pour votre blog. Il a été extrêmement utile pour moi dans se lever à la vitesse avec opencv via python. Vous obtenez un upvote pour ça 🙂 - dernière ligne: cv2.VideoCapture(0).release() peut être simplement de la pac.release() 🙂
- Est option
2
omis par erreur? - Il misnumbered eux. Ils sont tous TROP ÉLEVÉ. Quelqu'un merci de modifier.
- fait, me semble bon pour moi maintenant 🙂
Vous devez vous connecter pour publier un commentaire.
Pas tous les paramètres sont pris en charge par toutes les caméras - en fait, ils sont l'un de la partie la plus pénible de la bibliothèque OpenCV. Chaque type de caméra - android caméras de caméras USB de professionnels offre une interface différente pour modifier ses paramètres. Il y a beaucoup de branches dans OpenCV code pour prendre en charge que beaucoup d'entre eux, mais bien sûr, pas toutes les possibilités sont couverts.
Ce que vous pouvez faire est d'étudier votre pilote d'appareil photo, écrire un patch pour OpenCV et de l'envoyer à code.opencv.org. De cette façon, d'autres vont profiter de votre travail, de la même manière que vous profitez de ceux des autres.
Il est également possible que votre appareil photo ne prend pas en charge votre demande - la plupart des périphériques USB cames sont bon marché et simple. Peut-être que ce paramètre n'est tout simplement pas disponible pour les modifications.
Si vous êtes sûr que la caméra prend en charge un paramètre (par exemple, le fabricant de la caméra fournit un peu de code) et ne veulent pas se salir avec OpenCV, vous pouvez envelopper ce un exemple de code en C++ avec boost::python, pour le rendre disponible en Python. Alors, profitez de l'aide il.
D'éviter d'utiliser des valeurs de type entier pour identifier les
VideoCapture
propriétés, on peut utiliser, par exemple,cv2.cv.CV_CAP_PROP_FPS
dans OpenCV 2.4 etcv2.CAP_PROP_FPS
dans OpenCV 3.0. (Voir aussi Stefan de commentaire ci-dessous.)Ici une fonction d'utilité qui fonctionne pour les deux OpenCV 2.4 et 3.0:
OPCV3
est définie plus tôt dans ma utilitaires de code comme ceci:cv2.cv.CV_CAP_PROP_XXXX
chose - pour plus d'infos sur ce sujet, voir code.opencv.org/issues/3181 si vous utilisez la dernière branche que vous pouvez utilisercv2.CAP_PROP_XXXX
J'ai eu le même problème avec openCV sur Raspberry Pi... ne sais pas si cela peut résoudre votre problème, mais ce qui a fonctionné pour moi a été
le temps que vous avez à utiliser peuvent être différents
Je n'étais pas en mesure de résoudre le problème d'OpenCV, mais un video4linux (V4L2) solution de contournement ne fonctionne avec OpenCV lors de l'utilisation de Linux. Au moins, il le fait sur mon Raspberry Pi avec Rasbian et ma webcam bon marché. Ce n'est pas aussi solide, léger et portable que vous souhaitez qu'il soit, mais pour certains cas, il pourrait être très utile tout de même.
Assurez-vous que vous avez la v4l2-ctl application installée, par exemple, de la distribution Debian v4l-utils paquet. Plutôt que de courir (avant l'exécution de l'application en python, ou de l'intérieur) la commande:
Il remplace votre obturateur de la caméra de temps pour les réglages manuels et les changements de l'obturateur temps (en ms?) avec le dernier paramètre (dans cet exemple) 10. Plus cette valeur est faible, plus l'image est sombre.
Si quelqu'un est encore à se demander quelle est la valeur en
CV_CAP_PROP_EXPOSURE
pourrait être:Dépend. Pour ma webcam bon marché, je dois saisir la valeur désirée directement, par exemple de 0,1 pour 1/10s. Pour mon cher industriel de la caméra-je entrer dans de -5 à obtenir un temps d'exposition de 2^5 = 1/32s.