OpenCV Langsame Kamera framerate
Ich nur kopiert ein Programm zur Erkennung von Gesichtern durch die webcam, aber die video-capture ist wirklich langsam, und ich weiß nicht, wie es zu lösen ist!
Hier ist der code:
#include<stdio.h>
#include<math.h>
#include<opencv\cv.h>
#include<opencv\highgui.h>
#include<opencv2\objdetect\objdetect.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<vector>
using namespace cv;
using namespace std;
int main()
{
CascadeClassifier face_cascade;
if(!face_cascade.load("c:\\haar\\haarcascade_frontalface_alt2.xml")) {
printf("Error loading cascade file for the face");
return 1;
}
VideoCapture capture(0);
if(!capture.isOpened())
{
printf("Error trying to start the Camera");
return 1;
}
Mat cap_img,gray_img;
vector<Rect> faces;
while(1)
{
capture >> cap_img;
waitKey(10);
cvtColor(cap_img, gray_img, CV_BGR2GRAY);
cv::equalizeHist(gray_img,gray_img);
face_cascade.detectMultiScale(gray_img, faces, 1.1, 10, CV_HAAR_SCALE_IMAGE | CV_HAAR_DO_CANNY_PRUNING, cvSize(0,0), cvSize(300,300));
for(int i=0; i < faces.size();i++)
{
Point pt1(faces[i].x+faces[i].width, faces[i].y+faces[i].height);
Point pt2(faces[i].x,faces[i].y);
rectangle(cap_img, pt1, pt2, cvScalar(191,191,191), 2, 8, 0);
}
imshow("Result", cap_img);
waitKey(3);
char c = waitKey(3);
if(c == 27)
break;
}
return 0;
}
Ich benutze Visual studio 2012 und das ist die main.cpp Datei. Im mit OpenCV 2.4.9!
- Hast du das kompilieren im debug-oder im release-Modus? OpenCv ist die Laufzeit erheblich verbessert werden, wenn kompiliert und ausgeführt im release-Modus!
- Im release-Modus, es ist mir eine exe fehlt Fehler! Es ist das erste mal im arbeiten mit OpenCv..
- Sieht aus wie die Bibliotheken-Pfade Durcheinander kommen, wenn ich es auf release-Modus, ich weiß nicht, warum! Hier ist ein PrintScreen der einige der Fehler, wenn ich es auf release-Modus... i.imgur.com/9aXf9GA.png
- Sie müssen setup Ihre Projekt-Eigenschaften die gleiche Weise ein, wie Sie in den debug-Modus. Ansonsten weder Ihre header-Dateien noch die libs gefunden werden kann. WICHTIG: Stellen Sie sicher, dass Sie die Bibliotheken angeben, deren Dateinamen werden nicht mit dem Suffix 'd'. E. g.
opencv_imgproc249.lib
stattopencv_imgproc249d.lib
- Ok, danke Mann. Es gibt kein Fehler jetzt aber noch die Exe fehlt Fehler!
- Es funktioniert jetzt, ich musste nur ändern, ein paar Sachen in den Präprozessor zu akzeptieren fopen! Vielen Dank für alles, Mann, es funktioniert jetzt 🙂
- Die Framerate ist jetzt viel besser, aber do u wissen, etwas mehr zu erhöhen?
- Sollten Sie auf jeden Fall loszuwerden, alle diejenigen, die
waitKey()
Anrufe. Es wartet die angegebene Zeit in Millisekunden. Halten Sie einfach die letzten drei Zeilen deiner while-Schleife und entfernen Sie die andere zwei Anrufe. - Wow danke Mann, es ist wirklich schneller geworden! Du bist ein OpenCV professional xd
- Ich poste eine Zusammenfassung als Antwort dann. Bitte akzeptieren Sie durch anklicken der grünen Häkchen, um diese Antwort zu markieren, dass es dein problem gelöst hat.
- Ja, Mann, natürlich 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
OpenCV kommt mit fertige Bibliotheken. Wenn Sie eine Anwendung, die Sie tatsächlich bereitstellen möchten, stellen Sie sicher, verwenden Sie die release-Bibliotheken. Im debug-Modus, haben Sie viele zusätzliche Prüfungen in form von
asserts
sowie debug-Symbole, so dass Sie einen Schritt in die Bibliotheken mit einem debugger entfernt werden, im release-Modus.Andere mehr spezifische Empfehlungen bezüglich der code, den Sie geschrieben: Vermeiden Sie Anrufe zu
cv::waitKey()
wie jeder einzelne Aufruf, wer hätte das gedacht, macht Ihrem Haupt-thread warten die angegebene Zeit in Millisekunden. Nicht, drop fordert, um es ganz als z.B.cv::imshow()
wird nur richtig arbeiten mit diesen im Ort.Edit:
Reduzieren Sie Ihre while-Schleife:
Wenn Sie wissen, wie viel Zeit Sie brauchen für die Erfassung der Bild-und nur die Anzeige, dann können Sie vergleichen, wie viel Einfluss auch immer-Algorithmus ausgeführt werden, hat auf Ihre Leistung.
cv::waitKey(x)
zu x = 1. Das wird Sie so schnell wie möglich mit Ihrer aktuellen hardware.Hier ist die Lösung...jedes mal, wenn Sie Lesen!!!..everytime, das Sie verwenden, vcap>>Kappe oder Mütze.Lesen(vcap)... man muss einstellen FPS ..25 ist max..wenn ich versuchen, 26 oder höher läuft es langsam.
...dieser läuft mit 30 fps für mich
Wenn Sie nicht festgelegt FPS...es läuft langsam zu