Artikel ini meneroka masalah biasa yang dihadapi semasa menangkap video menggunakan objek VideoCapture OpenCV: lag disebabkan oleh penangkapan penampan. Kami membentangkan penyelesaian yang berpotensi, kedua-duanya daripada OpenCV dan sebagai penggodam.
Menurut dokumentasi OpenCV, saiz penimbal tangkapan boleh ditetapkan. Walau bagaimanapun, ciri ini hanya tersedia dengan bahagian belakang DC1394 v2.x.
<code class="cpp">cv::VideoCapture cap; cap.set(CV_CAP_PROP_BUFFERSIZE, 3);</code>
Dalam OpenCV versi 3.4 dan lebih baharu, pengehadan nampaknya telah dialih keluar:
<code class="cpp">cv::VideoCapture cap; cap.set(cv::CAP_PROP_BUFFERSIZE, 3);</code>
Jika penyelesaian OpenCV gagal, kami boleh menggunakan penggodam berdasarkan mengukur masa yang diperlukan untuk mendapatkan semula bingkai. Jika terlalu pendek, bingkai itu berkemungkinan telah diambil daripada penimbal dan boleh dibuang. Kami terus menyoal bingkai sehingga masa melebihi ambang, menunjukkan bingkai terkini.
Satu lagi penggodam melibatkan penciptaan urutan berasingan untuk terus merebut bingkai pada kelajuan tinggi, menggunakan cv::VideoCapture.grab(), untuk memastikan penimbal kosong. Penyegerakan antara utas utama dan tambahan boleh dicapai menggunakan kunci putaran.
Walaupun OpenCV menyediakan tetapan saiz penimbal, ketersediaannya terhad dengan bahagian belakang tertentu. Penggodam yang dibentangkan menawarkan pendekatan alternatif untuk mengurangkan ketinggalan penimbal, membolehkan pembangun menangkap video dengan kelewatan yang dikurangkan. Penyelesaian optimum mungkin berbeza-beza bergantung pada keperluan sistem dan aplikasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengurangkan Lag Penampan Apabila Merakam Video dengan VideoCapture OpenCV?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!