OpenCV: impossible de définir la résolution de la capture vidéo
Je suis en utilisant OpenCV 2.4.5 sur Ubuntu 12.04 64 bits. Je voudrais être en mesure de définir la résolution de l'entrée de mon Logitech C310 webcam. La caméra prend en charge jusqu'à 1280 x 960 à 30 fps, et je suis en mesure d'afficher de la vidéo à la présente résolution, en guvcview. Mais OpenCV obtient toujours la vidéo de seulement 640 x 480.
Essayer de changer la résolution avec la pac.set(CV_CAP_PROP_FRAME_WIDTH, 1280) et le capuchon.set(CV_CAP_PROP_FRAME_HEIGHT, 960) immédiatement après la VideoCapture cap est créé n'a aucun effet; en essayant de mettre en avant tout le cadre, le programme crash immédiatement. Je ne peux pas réduire la résolution avec cette méthode. Je reçois également le message d'erreur "HIGHGUI ERREUR: V4L/V4L2: VIDIOC_S_CROP". Je pense que cela peut être lié, parce qu'il apparaît lorsque l'VideoCapture est créé, et une fois quand j'essaie de définir la largeur et la hauteur (mais, curieusement, pas si j'ai essayer de mettre un seul d'entre eux).
Je sais que je ne suis pas le premier à avoir ce problème, mais je n'ai pas encore trouver une solution après beaucoup de recherches sur Google et le récurage d'ailleurs sur l'internet (parmi les nombreuses choses que j'ai déjà essayé en vain la réponse à cette StackOverflow question: L'augmentation de la caméra résolution de capture dans OpenCV). Est-ce un bug dans OpenCV? Si oui, il est assez flagrante.
Voici un exemple de code qui expose le problème (juste une version modifiée de OpenCV de l'affichage vidéo de code):
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0); //open the default camera
if(!cap.isOpened()) //check if we succeeded
return -1;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
Mat image;
namedWindow("Video", CV_WINDOW_AUTOSIZE);
while(1)
{
//cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
//cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
cap >> image;
imshow("Video", image);
if(waitKey(10) == 99 ) break;
}
return
}
Comme il est, que me deux "HIGHGUI ERREUR"s comme décrit ci-dessus et je reçois un 640x480 sortie. Je sais que 160x120 est une résolution que mon appareil photo prend en charge l'exécution de v4l2-ctl --list-formats-ext
. Si je décommentez les deux commenté de lignes dans la boucle while, le programme se bloque immédiatement.
Ceux-ci pourraient être liées ou ont des solutions possibles: http://answers.opencv.org/question/11427/decreasing-capture-resolution-of-webcam/http://answers.opencv.org/question/30062/error-setting-resolution-of-video-capture-device/
source d'informationauteur erobertc
Vous devez vous connecter pour publier un commentaire.
C'est un bug dans le v4l "version" (build) de OpenCV 2.4 (y compris 2.4.12), mais le bug n'est pas dans le de libv4l version. Pour OpenCV 3.1.0, ni le v4l ni la libv4l version a le bug.
(Votre erreur message d'erreur
HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
indique que vous avez le v4l version; le message est dans cap_v4l.cpp, voir codemais pas dans cap_libv4l.cpp.)Un solution de contournement pour obtenir le v4l version d'OpenCV 2.4 de travailler à un fixe résolution autre que celle de 640 x 480 est
modifier les valeurs pour
DEFAULT_V4L_WIDTH
etDEFAULT_V4L_HEIGHT
dansmodules/highgui/src/cap_v4l.cpp et re-construction d'OpenCV, bravo à cette
réponse.
Si vous voulez construire la libv4l version, au contraire, vous avez probablement besoin de faire est de
installer
libv4l-dev
et reconstruire OpenCV;WITH_LIBV4L
a été activé par défaut pour moi. Si elle n'est pas, votre commande cmake doit contenirLe cmake sortie (ou version_string.tmp) pour un libv4l build contient quelque chose comme
(V4l build, c'est juste
V4L/V4L2: NO/YES
.)Vous pouvez utiliser v4l2-ctl pour définir la taille d'image de la vidéo capturée comme ci-dessous.
Vous pouvez trouver plus d'informations à ce lien
Voulais juste ajouter mon CMAKE options pour construire avec Java sur le Raspberry Pi 3 basé sur Ulrich réponse complète pour OpenCV 3.2.0. Faire /construire un dossier dans le même dossier que OpenCV CMakeList.txt et d'exécuter ce script pour le nouveau /dossier de création:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE-D WITH_OPENCL=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_SHARED_LIBS=OFF -D JAVA_INCLUDE_PATH=$JAVA_HOME/include -D JAVA_AWT_LIBRARY=$JAVA_HOME/jre/lib/bras/libawt.so-D JAVA_JVM_LIBRARY=$JAVA_HOME/jre/lib/bras/serveur/libjvm.so-D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TESTS=OFF -D WITH_MATLAB=OFF -D WITH_CUFFT=OFF -D WITH_CUDA=OFF -D WITH_CUBLAS=OFF -D WITH_GTK=OFF -D WITH_WEBP=OFF -D BUILD_opencv_apps=OFF -D BUILD_PACKAGE=OFF -D WITH_LIBV4L= ..
Peut-être que vous pouvez l'essayer, mais je ne suis pas sûr si c'est ce que vous voulez:
Comme cela, vous obtenez le plein écran pour l'écran.