OpenCV: nicht festlegen können-Auflösung der video-capture -
Ich bin mit OpenCV-2.4.5 unter Ubuntu 12.04 64-bit. Ich möchte in der Lage sein, um die Auflösung der input von meiner Logitech C310 webcam. Die Kamera unterstützt bis zu 1280x960 bei 30fps, und ich bin in der Lage, um das video in dieser Auflösung in guvcview. Aber OpenCV bekommt immer das video mit nur 640x480.
Versucht die Auflösung zu ändern mit cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280) und cap.set(CV_CAP_PROP_FRAME_HEIGHT, 960) unmittelbar nach der Videoergreifung cap erstellt wird, hat keine Wirkung; die versuchen, Sie sofort zu bekommen, bevor jeder Rahmen bricht das Programm sofort. Ich kann nicht die Auflösung zu verringern, die mit dieser Methode. Ich bin auch immer der Fehler "HIGHGUI FEHLER: V4L/V4L2: VIDIOC_S_CROP". Ich denke, das kann bezogen werden, da scheint es einmal, als der Videoergreifung erstellt wird, und einmal, wenn ich versuche, die Breite und Höhe (aber seltsamerweise nicht, wenn ich versuche, nur einer von Ihnen).
Ich weiß, ich bin nicht die erste, die dieses problem haben, aber ich habe noch eine Lösung zu finden, nach viel Googlen und scheuern SO und anderswo auf dem internet (unter den vielen Dingen, ich habe es bereits versucht ohne Erfolg, ist die Antwort auf diese StackOverflow-Frage: Die zunehmende Kamera-Aufnahme-Auflösung in OpenCV). Ist das ein bug in OpenCV? Wenn ja, ist es ein eher krasser.
Hier ist ein Beispiel code, der zeigt das problem (nur eine modifizierte version von OpenCV video anzeigen-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
}
Als es ist, bekommt von mir zwei "HIGHGUI FEHLER"s wie oben beschrieben und ich bekomme eine 640 x 480 ausgegeben. Ich weiß, 160x120 ist eine Auflösung, die meine Kamera unterstützt vom laufen v4l2-ctl --list-formats-ext
. Wenn ich die Auskommentierung der beiden auskommentierten Zeilen in der while Schleife stürzt das Programm ab sofort.
Diese könnte im Zusammenhang oder mögliche Lösungen: http://answers.opencv.org/question/11427/decreasing-capture-resolution-of-webcam/, http://answers.opencv.org/question/30062/error-setting-resolution-of-video-capture-device/
Gepostet!!! Das problem ist ausgestellt mit einfach eine modifizierte version von OpenCV ist Videoergreifung Beispiel.
Ich habe versucht es jetzt mit einem C920 und es produziert genau das gleiche Ergebnis.
Sie sind immer "highgui Fehler." Das kann bedeuten, Sie haben keine problem mit der Einrichtung der Bildgröße, aber dein code kann nicht mit der Geschwindigkeit der Bildaufnahme. Dein code hat Verspätung ansammeln, nachdem wir das Bild. Ich vermute, die Ursache des Fehlers. In der Regel haben, sollten Sie einen separaten thread für grabbing und anderen thread für die Anzeige der Bilder bekommen. Ihr code nicht haben. Ich habe gerade versucht meinen code und habe keine problem mit der Einrichtung, die Auflösung.
Ich vermute, der Grund, warum Dinge, die für Sie gearbeitet ist, dass Sie die von libv4l-version von OpenCV, siehe mein Antwort.
InformationsquelleAutor erobertc | 2013-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein Fehler in der v4l "version" (build) von OpenCV 2.4 (einschließlich 2.4.12), aber der Fehler ist nicht in der von libv4l version. Für OpenCV 3.1.0, weder v4l noch die von libv4l-version hat den bug.
(Fehler-Fehlermeldung
HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
zeigt, dass Sie das v4l-version; die Nachricht ist in cap_v4l.cpp finden Sie code, aber nicht in cap_libv4l.cpp.)Einen Abhilfe, um die v4l-version von OpenCV 2.4 arbeiten auf einen festen andere Auflösung als 640x480 ist
ändern Sie die Werte für
DEFAULT_V4L_WIDTH
undDEFAULT_V4L_HEIGHT
immodules/highgui/src/cap_v4l.cpp und re-building OpenCV ein großes Lob an dieses
Antwort.
Wenn Sie bauen wollen, die von libv4l-version statt, alle müssen Sie wahrscheinlich zu tun ist
installieren
libv4l-dev
und Wiederaufbau OpenCV;WITH_LIBV4L
war standardmäßig aktiviert, für mich. Wenn es nicht ist, Ihre cmake-Befehl enthalten sollteDen cmake-Ausgang (oder version_string.tmp) für eine von libv4l build enthält so etwas wie
(V4l zu bauen, es ist nur
V4L/V4L2: NO/YES
.)Wie hast du python-Bindungen für die Arbeit mit opencv3.1?
Ich hab nichts besonderes in der build (verwendet dieser
cmake
). Ich in der Regel überspringenmake install
und tunsudo cp lib/cv2.so /usr/local/lib/python2.7/dist-packages/
direkt.Ich nicht zu haben scheinen lib/cv2.so. Ich habe eine ganze Menge lib/libopencv_*.so dass die Dateien und ich habe eine lib/Python ist3/cv2.cpython-34 Meter.also die Datei, aber nicht die, die Sie angeben.
Ich habe die lib/libopencv_*.so aber nicht lib/Python ist3 Ordner. Also meine Vermutung ist, dass etwas schief ging, für die Python-3-Teil in deinem Falle...
InformationsquelleAutor Ulrich Stern
Können Sie v4l2-ctl zu legen die frame-Größe der aufgenommenen Videos wie unten.
Finden Sie weitere Informationen zu diesem link
v4l2-ctl
und hat keine Auswirkungen auf den c++ - Programm.InformationsquelleAutor Ömer Taban
Wollte nur hinzufügen mein CMAKE-Optionen zu bauen mit Java auf dem Raspberry Pi-3 basiert auf Ulrich ' s umfassende Antwort für OpenCV 3.2.0. Machen /build-Ordner in den gleichen Ordner wie OpenCV CMakeList.txt und führen Sie dieses Skript für die neue /build-Ordner:
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/arm - /libawt.so -D JAVA_JVM_LIBRARY=$JAVA_HOME/jre/lib/arm/server/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=AUF ..
InformationsquelleAutor Austin
Vielleicht können Sie versuchen, diese, aber ich bin nicht sicher, ob dies ist, was Sie wollen:
Wie diese Sie erhalten den vollen Bildschirm für jeden Bildschirm.
InformationsquelleAutor user3766585