Я постоянно использую камеру для получения кадров. В моем коде я использовал VideoCapture, чтобы сделать это. Но когда я отлаживаю, я обнаруживаю, что полученный кадр — это старый кадр. Я спросил некоторых парней, они сказали мне, что некоторые старые кадры будут храниться в буфере, и я должен использовать рабочий поток, чтобы получить последний кадр. Также здесь есть похожий вопрос.
Здесь у меня есть два вопроса,
Если в буфере может храниться 5 кадров, и теперь в нем хранится 5 кадров, когда происходит обновление буфера? После того, как 5 кадров были выведены или только 1 кадр? Потому что я хочу знать, получал ли я старые кадры все время или получил один новый кадр, затем четыре старых кадра затем меняются на один последний кадр …
Я отладил свой код, установил точку останова в cap >> frame. Первый кадр (петля) Вставьте мою руку, а второй цикл вытяните мою руку из камеры, я обнаружил, что изображение изменится через несколько кадров. Означает ли это, что у меня есть один новый кадр, затем четыре старых кадра, а затем один последний кадр …?
2. Потому что я впервые использую нить, я не уверен, что мой код неправильный или нет, вот мой код,
void task(VideoCapture cap, Mat& frame) {
while (true) {
cap.grab();
}
}
int main() {
Mat frame, image;
VideoCapture cap;
cap.open(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1600);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
cap.grab();
thread t(task, cap, frame);
while (true) {
cap.retrieve(frame);
frame.copyTo(image);
...//image processing loop
}
}
Я также установил точку останова в task () для проверки фрейма, но это то же самое условие. Изображение изменится через несколько кадров. Я не знаю почему. Мой код неверен или я не могу установить точку останова, чтобы проверить, как это, используя поток? Может ли кто-нибудь помочь? Большое спасибо.
Задача ещё не решена.
Других решений пока нет …