Перейти к содержимому
Compvision.ru
mr_tyman

WinForm и OpenCV

Recommended Posts

День добрый!

Написал небольшую программу в консольной версии на OpenCV, в нормальный вид перегнал на Visual Studio 2010 с использованием Windows form.

И столкнулся с проблемой. В начале вызывается основная форма для работы, на ней есть PictureBox куда через BitImage отправляю на показ картинку. После нажатия кнопки "Старт" на этой форме в цикле начинаю получать кадр с IP-камеры, и обрабатывать его с помощью OpenCV. В связи с использованием PictureBox надобности в окошках для показа картинки от OpenCV нету. И тут возникает проблема: если в цикле обработки нету ни одного cvShowImage, то программа запускается, работает, на форме видно как идут кадры в PictureBox, но форма висит. Ничего нажать на ней нельзя.

В итоге пока приходится открывать пустое окошко и Move'ать его за пределы видимости экрана, тогда все работает. Кто подскажет как с этим справиться? (Желательно без переписывания всего кода с использованием QT или еще чего другого)

Заранее большое спасибо за ответ!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прерывается цикл обработки сообщений окна, из-за того, что Ваш цикл занимает все ресурсы.

Думается, что-нибудь типа Sleep(5) в цикле должно помочь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прерывается цикл обработки сообщений окна, из-за того, что Ваш цикл занимает все ресурсы.

Думается, что-нибудь типа Sleep(5) в цикле должно помочь.

Так а каким тогда образом добавление задачи отображения картинки средствами OpenCV в цикл поможет не занимать все ресурсы? Наверное что-то другое...

Пробовал Sleep, не помогает. Ни 1 мс ни 1000, и конструкции типа

time_p=0;

start_p=clock();

while (time_p<0.1)

{

end_p=clock();

time_p=(double) (end_p-start_p)/CLOCKS_PER_SEC;

}

тоже не помогают.

Есть еще идеи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть, взять функцию imshow из исходников OpenCV и по кускам вставлять в свой код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть, взять функция imshow из исходников OpenCV и по кускам вставлять в свой код.

Спасибо за идею, буду эксперементировать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В общем проблема была в том, что cvWaitKey не работает без окон вызванных средствами OpenCV.

А без cvWaitKey все формы виснут. Да и не только формы. Если тупо в цикл выводить картинку:

while (true)

cvShowImage("Image", image);

то вместо картинки мы будем видеть серый экран, приходится добавить cvWaitKey(1);

while (true)

{

cvShowImage("Image", image);

cvWaitKey(1);

}

но можно использовать для этой цели вот это: (собсно обработка сообщений в том числе и происходит в cvWaitKey)

MSG message;

PeekMessage(&message, 0, 0, 0, PM_REMOVE);

TranslateMessage(&message);

DispatchMessage(&message);

:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×