Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
1

Дополненная реальность на Builder

18.02.2017, 15:12. Показов 2240. Ответов 20

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Пишу диплом, тема дополненная реальность. Реализовать нужно именно на с++ билдер. Много гуглил по этой теме и кроме Swarp SDK ничего толкового не нашел(и то, саму сварпСДК не удалось найти, да и решил обойтись без нее). В данный момент получил изображение с вебки и смог реализовать простую обработку изображения (диапазон писелей от белого до серого заменяю идеально черным), делаю это так: изображение с вебки передаю в Image, от туда каждые 100 мс беру кадр в BitMap и произвожу его обработку, обработанный кадр помещаю в другой имидж. Итог - два имиджа : 1- до 2 - после обработки. Обработка самая простая -

C++
1
2
3
4
5
6
7
8
9
for(int x=0; x<Image1->Width; x++){
for(int y=0; y<Image1->Height; y++){
TColor pix = GetPixel(kadr->Canvas->Handle, x,y);
if (pix <16777215 && pix > 7631988)
{
kadr->Canvas->Pixels[x][y] = clBlack;
}
}
}
(пока пытаюсь просто фильтровать фон - цветной кубик на белом фоне должен быть тем же кубиком на черном фоне, в дальнейшем фон будет заменем на изображение, но пока хотя бы так).
Проблема собственно в том, что такая обработка занимает много времени и заметно тормозит видео. Нуждаюсь в вашем совете, как ускорить процесс обработки? Думал проверять не каждый пиксель, а например каждый пятый, но думаю больших изменений скорости это не принесет. Есть предположение - наложить что то вроде размытия на кадр и анализировать ту область, где происходит "перепад" цветов. Но как это реализовать, и есть ли в этом смысл я не знаю. Подскажите пожалуйста, есть ли у кого какие мысли по этому поводу?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2017, 15:12
Ответы с готовыми решениями:

Дополненная реальность C++/OpenCV/ArUco
Есть программа, которая считывает видео поток с веб камеры, распознает маркеры, на основе этого...

Дополненная реальность
Здравствуйте, возник вопрос с чего начать изучение дополненной реальности, информации в интернете...

Дополненная реальность
Здравствуйте! Не знаю в ту ли тему пишу но вот какой вопрос. Наверняка Вы знаете про дополненную...

Дополненная реальность
Недавно заинтересовался технологией дополненной реальности (знаю, что популярность прошла еще году...

20
случайный прохожий
2935 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,159
18.02.2017, 20:29 2
Попробуй использовать ScanLine.
1
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
19.02.2017, 17:33  [ТС] 3
Что то я не могу понять как работает ScanLine.. Можете объяснить в двух словах? И Было бы очень здорово небольшой пример использования.

Добавлено через 2 часа 48 минут
Используя ScanLine получаю изображение в полоску, а не сплошной цвет... Поэтому прошу просветить в принцип работы ScanLine.
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
19.02.2017, 19:33 4
NewOFF, доступ через сканлайн просто быстрее чем доступ через пиксели
0
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
19.02.2017, 20:01  [ТС] 5
Опытным путем уже убедился в этом. Но , повторюсь, через ScanLine у меня изображение окрашивается в полоску, а не сплошным цветом.
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
19.02.2017, 20:26 6
NewOFF, что это значит? Может вы неправильно с ним работаете?
0
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
26.02.2017, 13:39  [ТС] 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for(int y = 0; y < Image2->Height; y++)
{
Pix = (TRGBTriple*)kadr->ScanLine[y];
for(int x = 0; x < Image2->Width; x++)        //skanline
{
R = Pix[x].rgbtRed;
B = Pix[x].rgbtBlue;
G = Pix[x].rgbtGreen;
if ((B > 128 && B < 255) && (G > 128 && G < 255) && (R > 128 && R <255))
{
Pix[x].rgbtRed = 0;
Pix[x].rgbtBlue = 0;
Pix[x].rgbtGreen = 0;
}
 
}
}
Вот как я использую ScanLine. По идее диапазон цвета который я обозначил в условии должен окраситься черным. А на деле получаю вот такую "зебру".
Миниатюры
Дополненная реальность на Builder  
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
26.02.2017, 14:19 8
NewOFF, у вас 24 бит на пиксель?
0
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
26.02.2017, 14:37  [ТС] 9
32 вроде..
C++
1
2
if (kadr->PixelFormat == pf32bit) {Edit1->Text = 32;}
 if (kadr->PixelFormat == pfDevice) {Edit1->Text = "device";}
Вот так я определял это, первый кадр( необработанный) pfDevice, а дальше pf32bit.
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
26.02.2017, 15:10 10
NewOFF, тогда почему вы думаете что в сканлайн лежит TRGBTriple?
0
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
26.02.2017, 15:41  [ТС] 11
Прошу прощения за мою неосведомленность, но с графикой я работаю впервые. Не могли бы вы подсказать что именно не так с Triple?
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
26.02.2017, 15:48 12
Лучший ответ Сообщение было отмечено NewOFF как решение

Решение

NewOFF, то что в нем 24 бита - по 8 на каждую компоненту, а у вас точка занимает 32 бита - с каждой точки 8 бит уходят в пользу зрительного зала. Поменяйте формат на 24 бит или подпрыгните с типами
1
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
26.02.2017, 15:59  [ТС] 13
Спасибо большое, все получилось. Поменял на 24 бит. Скажите пожалуйста, 32 и 24 бит отличаются тем что у 32 бит можно задать прозрачность? Или я не правильно понял?
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
26.02.2017, 16:03 14
NewOFF, где-то может и можно а вообще это просто для выравнивания - железу и софту так легче
0
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
26.02.2017, 16:05  [ТС] 15
А вы не знаете случайно как мне теперь вместо закрашивания черным делать пиксели прозрачными?
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
26.02.2017, 16:08 16
NewOFF, а под ними что? Ещё один имадж?
0
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
26.02.2017, 16:09  [ТС] 17
Если честно, особо над этим еще не думал, но первое что лезет в голову - еще один имидж...
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
26.02.2017, 16:21 18
NewOFF, по-моему легче копировать точки другого имаджа вместо назначения чёрного цвета, но может я плохо понимаю что должно получиться..
0
0 / 0 / 1
Регистрация: 22.05.2016
Сообщений: 22
26.02.2017, 16:22  [ТС] 19
Как вариант попробую, но боюсь чтобы это не отразилось на скорости работы. Происходит все в реальном времени. Но я попробую, спасибо большое))
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
26.02.2017, 16:54 20
NewOFF, можно попробовать посмотреть в сторону такого понятия как маска - есть у имаджа или пикчи такая штукенция вроде
0
26.02.2017, 16:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2017, 16:54
Помогаю со студенческими работами здесь

Unity4 и дополненная реальность
Ребята подскажите пожалуйста возможно ли написать программку под андроид с функцией дополненной...

Дополненная реальность в Android
Кто знает, какие классы могут использоваться в Дополненной реальности в Android ? Есть видео, с...

Программист C++ (дополненная реальность)
Вакансия Программист C++ (дополненная реальность) Обязанности: Разработка инструментов...

Виртуальная реальность
Что вы скажите уважаемые на счёт того, что возможно наш разум является частью одного всеобщего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru