2009-10-25 4 views
0

Я создал программу, которая имеет два потока, которые скоро будут три, которые пытаются получить изображение из веб-камеры из обоих потоков одновременно. Есть ли способ сделать это или есть лучший способ сделать это? (с использованием openCV 1.1)OpenCV Многопоточный вызов

+1

Хм, вам действительно нужно подробно остановиться на вашем вопросе. Почему вы пытаетесь получить одно и то же изображение в двух потоках одновременно? Существует ли конкретная проблема с кодом, который вы сейчас используете? – DeusAduro

ответ

0

Если вы хотите, чтобы оба потока могли работать с изображением, вы должны написать метод, который дает вам текущее изображение. Вы можете получить изображение с кулачка при первом вызове метода и блокировать вызовы до загрузки изображения. Затем вы можете вернуть буферизованное изображение, пока не захотите получить следующее изображение. Таким образом, оба потока направляют один и тот же маршрут на кулак, и OpenCV не должен пытаться открывать соединения с камерой, и если вы блокируете только пока изображение не загружено, несколько потоков могут получить данные изображения после того, как они были сохранены на в то же время.

1

Могу ли я предложить только один из ваших потоков (позвольте назвать его основным) поговорить с камерой, получить изображение и установить его все. Как только он будет установлен и помещен в место в памяти, вы можете уведомить второй поток, где находится это место (использовать это мьютекс), и оба потока могут отключиться и выполнить их обработку. Как только обе потоки будут выполнены с этим изображением (здесь также используется мьютекс), вы можете первичным потоком получить другое изображение и начать процесс.

Если ваша камера производит много изображений, и вы хотите начать работать над ними до того, как оба потока закончатся, вы можете перейти к трем потокам ... один для получения изображения, а два других просто чтобы сделать два типа обработки. Это будет намного сложнее, потому что вам нужно будет иметь несколько буферов. Вероятно, вам также понадобятся несколько мьютексов и, возможно, пара очередей, но все это можно сделать :-)

Смежные вопросы