![]() |
|
Модераторы: xvr |
![]()
|
|
| Xonxt |
|
||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: нет Всего: 1 |
Доброе время суток.
Возникла следующая проблема. Пишу небольшую программу, использующую openCV. Есть функция processVideo(), в которой осуществляется захват изображения с камеры и его вывод на экран:
Но вот мне захотелось (не спрашивайте зачем, может просто для тренировки?) переделать все и засунуть в некий класс. Получается что-то вроде этого:
Я понимаю что моё ООП очень сильно хромаёт на все конечности... но всё же. |
||||||||||||
|
|||||||||||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
тут ты тайпдефишь указатель на функцию. и метод MyClass::processVideo() так же ожидает указатель на функцию. а тут: ты передаешь указатель на метод. по идее, можно решить с помощью промежуточного статического метода. т.е. указатель на этот статический метод передавай в "processVideo(processFrame);". а сам этот метод внутрях должен вызывать реальный метод "MyClass::processFrame()" надеюсь понятно объяснил... |
|||
|
||||
| Xonxt |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: нет Всего: 1 |
Т.е. что-то типа этого:
Кстати я видел примеры, что подобная ситуация разрешалась использованием некой библиотеки "Boost". Но когда я увидел сколько она весит, то я ужаснулся. Учитывая что у меня тут и так уже висит openCV в купе с Матлабом. Это сообщение отредактировал(а) Xonxt - 14.7.2011, 22:12 |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
да. при помощи boost::bind()/ но опять же, в данном случае это будет не выход, т.е. boost::bind() создает функциональный объект, а функция cvReleaseImage() ожидает аргументом указатель на IplImage. и вообще, функция cvReleaseImage() - это Си-функция. поэтому функциональный объект она не поймет. можно и типа этого. только в функцию Foo() нужно передать адрес класса, и адрес метода. |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: нет Всего: 1 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
в исходниках она имеет большой объем. а при компиляции приложения с ней, объем исполняемого файла вырастит совсем чуток, по сравнению с той же OpenCV ;) Добавлено через 12 минут и 23 секунды запутался.. |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: нет Всего: 1 |
А примера кода не будет? А то я тут уже эникейством заниматься начал. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
||||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: нет Всего: 1 |
Я вроде примерно разобрался.
Выглядит это вот так:
Однако оно не работает. Т.е. если поставить куда-то в processFrame какой-то маркер, типа вывода символа "!" в консоль, то видно, что оно срабатывает только один раз, а затем виснет. Добавлено через 5 минут и 39 секунд Хмык, странно. И пару раз даже запустилось и сработало. Видимо где-то с утечками памяти намудрил. Или просто руки кривые. |
|||
|
||||
| Xonxt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 24.1.2006 Где: Украина / Одесса Репутация: нет Всего: 1 |
В общем, вроде с проблемой разобрался.
Просто убрал нафиг этот callback и передачу ссылки на метод. Сделал простое присваивание а ля "картинка = Метод(картинка)". И всё же интересно почему предыдущий код не работал. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |