OpenCV의 VideoCapture를 사용하여 웹캠에서 mjpeg 비디오 스트림을 캡처하면 다음과 같은 경우 상당한 지연이 발생할 수 있습니다. 캡처 스레드는 웹캠 피드의 프레임 속도보다 낮은 속도로 프레임을 읽습니다. 이는 버퍼가 플러시될 때까지 캡처 버퍼에 프레임이 축적되어 발생합니다.
캡처 버퍼를 수동으로 플러시하려면 VideoCapture 개체의 CV_CAP_PROP_BUFFERSIZE 속성을 설정할 수 있습니다. 이렇게 하면 내부 버퍼에 저장되는 프레임 수가 제한됩니다. 그러나 이 옵션은 특정 백엔드 하드웨어에서만 지원됩니다.
버퍼 크기를 설정해도 문제가 해결되지 않으면 해킹 기술을 사용할 수 있습니다. 여기에는 프레임을 검색하는 데 걸리는 시간이 특정 임계값을 초과할 때까지 프레임을 반복적으로 쿼리하는 작업이 포함됩니다. 검색 시간이 비정상적으로 짧다면 이는 프레임이 버퍼에서 획득되었으므로 삭제해야 함을 나타냅니다.
또 다른 해킹 솔루션은 프레임을 지속적으로 가져오는 별도의 스레드를 만드는 것입니다. 캡처 버퍼를 비워두기 위해 고속으로 실행합니다. 이 스레드는 프레임을 잡는 동안 오버헤드를 방지하기 위해 cv::VideoCapture.grab() 함수를 사용해야 합니다. 동기화 기술을 사용하면 작업자 스레드가 제어된 방식으로 버퍼에서 프레임을 읽도록 할 수 있습니다.
위 내용은 OpenCV의 전체 캡처 버퍼로 인해 발생하는 비디오 캡처 지연을 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!