Videoyu bir mjpeg akışı veren bir web kamerası üzerinden yakalıyorum. Video çekmeyi bir çalışan iş parçacığında yaptım. Böyle yakalama başlatmak: Kamera Saniyede 20 kare üzerinden akışı besliyorOpenCV VideoCapture, yakalama arabelleği nedeniyle gecikme
const std::string videoStreamAddress = "http://192.168.1.173:80/live/0/mjpeg.jpg?x.mjpeg";
qDebug() << "start";
cap.open(videoStreamAddress);
qDebug() << "really started";
cap.set(CV_CAP_PROP_FRAME_WIDTH, 720);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 576);
. Ama hiç böyle Saniyede 20 kare içinde okuma yapsam:
if (!cap.isOpened()) return;
Mat frame;
cap >> frame; // get a new frame from camera
mutex.lock();
m_imageFrame = frame;
mutex.unlock();
Sonra saniye gecikme bir 3+ yoktur. Bunun nedeni, yakalanan videonun ilk önce bir tamponda saklanmasıdır. Kamerayı ilk başlattığımda, arabellek biriktirilir ancak çerçeveleri okumadım. Yani tampondan okursam, bana daima eski çerçeveleri verir. Şu anda sahip olduğum tek çözüm, arabayı 30 fps'de okumaktır, böylece arabelleği hızlı bir şekilde temizler ve daha ciddi bir gecikme olmaz.
Kamerayı her başlattığımda arabayı el ile temizleyebilmem/temizleyebilmem için başka olası bir çözüm var mı?
Neden 20 fps ile sınırlamak istiyorsunuz? İşçi işinde mi bekliyorsun? – mirosval
, kendi bir veya cv :: VideoCapture içindeki bir şey tampon mu? – Micka
@ mirosval, evet, yaptım çünkü çok fazla cpu istemiyorum ... – Nyaruko