я столкнулся с подобной проблемой, когда я работал на проект с использованием OpenCV 2.4.9 на платформе Intel Edison. Перед выполнением какой-либо обработки он занимал примерно 80 мс, чтобы выполнить захват кадра. Оказывается, что логика захвата камеры OpenCV для Linux, похоже, не реализована должным образом, по крайней мере, в версии 2.4.9. В базовом драйвере используется только один буфер, поэтому для его работы невозможно использовать многопоточность на прикладном уровне - пока вы не попытаетесь захватить следующий кадр, единственный буфер в драйвере V4L2 заблокирован.
Решение не должно использовать класс VideoCapture от OpenCV. Возможно, в какой-то момент было исправлено использование разумного количества буферов, но с 2.4.9 это не так. Фактически, если вы посмотрите на статью того же автора, что и ссылка, предоставленная @Nickil Maveli, вы обнаружите, что как только он предоставит предложения по улучшению FPS на малиновом Pi, он перестает использовать VideoCapture OpenCV. Я не считаю, что это совпадение.
Это мое сообщение об этом на форуме Intel Edison: https://communities.intel.com/thread/58544.
Я в основном закончил писать свой собственный класс для обработки кадров, используя V4L2. Таким образом, вы можете предоставить круговой список буферов и позволить правильной развязке захватить фрейм и логику приложения. Это было сделано на C++, хотя для приложения на C++. Предполагая, что приведенная выше ссылка дает свои обещания, это может быть гораздо более простым подходом. Я не уверен, будет ли это работать на BeagleBone, но, может быть, есть что-то похожее на PiCamera. Удачи.
EDIT: Я взглянул на исходный код для 2.4.11 OpenCV. Похоже, теперь они по умолчанию используют 4 буфера, но вы должны использовать V4L2, чтобы воспользоваться этим. Если вы внимательно посмотрите на сообщение об ошибке HIGHGUI ERROR: V4L: Property...
, вы увидите, что оно ссылается на V4L, а не на V4L2. Это означает, что сборка OpenCV, которую вы используете, падает на старый драйвер V4L. Помимо сингулярного буфера, вызывающего проблемы с производительностью, вы используете древний драйвер, который, вероятно, имеет множество ограничений и проблем с производительностью.
Лучше всего было бы создать OpenCV самостоятельно, чтобы убедиться, что он использует V4L2. Если я правильно помню, процесс настройки OpenCV проверяет, установлены ли на машине драйверы V4L2 и строит их соответственно, поэтому вы должны убедиться, что V4L2 и любые связанные с ним пакеты разработчика установлены на компьютере, который используется для сборки OpenCV.
Для этой проблемы, вероятно, не поможет, но если вы используете OpenCV на самом деле сделать резюме вещи, вы, вероятно, хотите, чтобы проверить, что OpenCV вы используете скомпилирован против расширений NEON. (doogle opencv beaglebone neon, вероятно, найдет полезную информацию, например http://blog.lemoneerlabs.com/3rdParty/Darling_BBB_30fps_DRAFT.html) – Foon
«opencv 2.4» - вам нужно быть более конкретным, было число 2.4 .x выпусков OpenCV в течение нескольких лет. –