Технический форум по робототехнике.
novoalex » 03 фев 2011, 18:55
Здравствуйте уважаемые.
Вопрос короткий и по существу:
Имеется скажем 2, 3 или 4 камеры, необходимо работать с каждой в своем потоке.
Кто решал подобный вопрос, как реализовать многопоточность ?
Спасибо.
Последний раз редактировалось
EdGull 03 фев 2011, 19:01, всего редактировалось 1 раз.
Причина: Не чего так орать
noonv » 04 фев 2011, 01:24
а с какими проблемами вы столкнулись?
novoalex » 04 фев 2011, 17:37
Для каждого захвата нужно создать нить (thread), в которой этот захват будет обрабатываться.
Всего захватов может быть, от 1-4, нужно их выводить на одну форму.
- Код: Выделить всё • Развернуть
...
#include "cv.h"
#include "highgui.h"
int main(int argc, char** argv)
{
cvNamedWindow("WebCamera", CV_WINDOW_AUTOSIZE);
CvCapture* capture1 =cvCreateFileCapture( "test1.avi" );
CvCapture* capture2 =cvCreateFileCapture( "test2.avi" );
CvCapture* capture3 =cvCreateFileCapture( "test3.avi" );
CvCapture* capture4 =cvCreateFileCapture( "test4.avi" );
...
while(true) {
image1 = cvQueryFrame(capture1);
image2 = cvQueryFrame(capture2);
image3 = cvQueryFrame(capture3);
image4 = cvQueryFrame(capture4);
...
cvShowImage("Example1", image1);
cvShowImage("Example2", image2);
cvShowImage("Example3", image3);
cvShowImage("Example4", image4);
if(cvWaitKey(0) == 27) break;
cvRelease...
}
Нужен поток, чтобы не было задержек...
Последний раз редактировалось
novoalex 04 фев 2011, 17:53, всего редактировалось 1 раз.
=DeaD= » 04 фев 2011, 17:40
Это постановка задачи, а с какими проблемами вы столкнулись?
noonv » 04 фев 2011, 17:40
это понятно
так с какими проблемами вы при этом столкнулись?
novoalex » 04 фев 2011, 17:58
http://nashruddin.com/Streaming_OpenCV_Videos_Over_the_NetworkПытался реализовать разными способами, не получается, короче нужен готовый пример, где правильно реализованы потоки..
Чтобы функции захватов были объявлены выше или в заголовочных файлах классами, или еще как..., а в main только запускались потоки... В общим как-то так.
Просто я с потоками в с++, первый раз сталкиваюсь.
Спасибо.
Но мне по сети не надо, локально нужно реализовать...
Как в данном случае можно использовать #include <pthread.h>?
noonv » 04 фев 2011, 18:06
а при чём тут OpenCV? Раз хотите писать многопоточное приложение - вам так или иначе нужно разбираться с потоками
Определяетесь с ОС под которую вам это нужно и вперёд
EDV » 04 фев 2011, 18:10
Я попробую в общих чертах пофилософствовать. Если речь идёт о потоках (и их взаимодействии) то проблема – приложение иногда вылетает с «крэшем» (злой анхенделид эксепшен).
Основной процесс обеспечивает взаимодействие с пользователем (GUI), потоки – захватывают изображение и выводят его в диалоговое окно (причём напрямую), и соответственно конфликтуют с основным процессом, которые в этот же момент может занимать/вызывать ресурсы, которыми пользуются потоки (к примеру отрисовка окна). Тут просто нужно правильно построить взаимодействие между основным процессом и потоками: расставить критические секции к примеру, или через события (MFC), сигнал/слот (QT4) и т.д.
novoalex » 04 фев 2011, 18:27
Извините за не внимательность, выше указанная ссылка показывает решение подобных задач полностью.
Но от комментариев не откажусь.
Спасибо.
ubuntu 10.04, opencv 2.2, wxWidgets, netbeans 6
Добавлено спустя 14 минут 14 секунд:
Все 4 потока захвата, которые я хочу реализовать, могут использовать какой то один IplImage, для того чтобы сделать подобие квадратора?
noonv » 04 фев 2011, 18:32
да. только не забудьте обрамить работу с этой картинкой мьютексом.
novoalex » 04 фев 2011, 18:47
Понятно.
novoalex » 18 фев 2011, 12:49
Если я хочу вывести изображение с 1..N камер, каким образом лучше поступить: склеить все фреймы и вывести один общий, или же использовать контролы (например panel) компоновать их и выводить в каждый, соответствующий фрейм. Естественно все захваты в потоках.
Как лучще поступить, как будет производительней?
Спасибо.
novoalex » 21 фев 2011, 09:56
Друзья, вопрос открыт.
=DeaD= » 21 фев 2011, 10:18
За это время можно было уже и эксперимент провести.
novoalex » 21 фев 2011, 12:44
Я конечно подозреваю, что отрисовка на компонентах займет больше времени, но подтверждения моим догадкам нет...