|
Ты за кого меня держиш!?
|
||||||
Обработка изображения с веб камеры на предмет движущихся объектов\изменившихся пикселей14.08.2012, 21:13. Показов 19661. Ответов 94
Метки нет (Все метки)
Специально для тех кто долго дрючил свои мозги, перерыл пол гугля и нихрена не нашёл выкладываю готовый пример обработки изображения с веб камеры.
Добавлено через 41 секунду Там только надо память очищать чтоб не утекла. ![]() Добавлено через 4 минуты По остальным вопросам лазим тут: http://msdn.microsoft.com/en-u... s.85).aspx тут: http://purebasic.ru/manual.php?id=1104&lng=rus тут: http://www.google.ru/webhp?source=search_app и здесь.
2
|
||||||
| 14.08.2012, 21:13 | |
|
Ответы с готовыми решениями:
94
Обработка изображения размером 800х600 пикселей
|
|
Кормпилятор
|
|||
| 21.08.2012, 05:19 | |||
Функция читает байт со знаком. PeekA читает байт без знака... Вопрос в другом, куда читаются эти изменения, если не в идентичную структуру, то битовая интерпретация данных будет неверна, точнее компилер будет думать, что работает с другим типом данных, эти вопросы машиной не контролируются, комп тупо складывает, умножает, вычитает эти байты, ему эти типы данных нужны чтобы строить маш. код программы. Знаковые числа в памяти и регистрах представлены в виде дополнительного кода. Для знаковых и беззнаковых разные операции умножения и деления. Глядя на ваш код видно, что читаются байты, а потом вы пытаетесь воспроизаести полноцветку из ничего, RGB(Red(Color), Green(Color), Blue(Color). Нужно читать за раз либо 3 байта, либо 4(это всё должно быть в документации по dll, с которой вы работаете). Вы должны найти в исходной структуре как расположены байты R,G,B и скопировать их в Image как показал вам Pro_grammer. Эту операцию можно делать через память, получив указатель на буфер Image.
чуть быстрее работает, но вы должны чётко представлять структуру исходника(Source) и структуру назначения(Destination).
1
|
|||
|
Кормпилятор
|
|||||||||
| 22.08.2012, 13:13 | |||||||||
в том, чтобы скопировать эти данные в image, с которым можно делать в PureBasic практически всё, что угодно. Вероятно различаются форматы хранения этих картинок (но не факт, что различаются, могут и совпадать, тогда задача упрощается в разы).
посмотреть порядок байт RGB, подставляя к веб камере красные, зелёные и синие предметы.
если 640x480 то объём данных будет равен Объём_данных = 640 * 480 * кол-во_байт_на_пиксельИ ваша прога не должна считывать из буфера больше данных, т.к. будет тупо ошибка доступа к памяти. А кол-во байт на пиксель скорее либо 3, либо 4. Попробуйте разные варианты, может веб камера возвращает в 16 битном формате(2 байта, по 5 бит на каждый цвет или 5 бит синий, 6 бит зелёный, 5 бит красный). Там делов то 10 минут протестировать. И все ошибки у вас из-за того что этот формат данных вы неправильно читаете(нельзя превышать границы считывания) + наверняка всю информацию о формате изображения можно получить функциями библиотеки, которой вы пользуетесь и не тыкать пальцем в небо. Image хранит своё изображение в формате AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBBТ.е. первые 8 бит - синий следующие 8 бит - зелёный следующие 8 бит - красный и последние 8 бит - альфа канал Но это не вся информация о структуре изображения, нужно ещё знать как строки пикселей располагаются в памяти. А располагаются они на изображении слева направо и снизу вверх, если в памяти идти по порядку. Код ваш примет вид:
в порядок. Сначала пишем так "чтобы работало", а потом уже оптимизируем. Оптимизируются такие вещи очень хорошо операциями сдвига бит и заранее заготовленными таблицами. Добавлено через 36 минут Немного накосячил в коде там, уже поправил всё.
1
|
|||||||||
|
Ты за кого меня держиш!?
|
||||||||||||||||||||||||||||||||||||
| 30.08.2012, 19:48 [ТС] | ||||||||||||||||||||||||||||||||||||
|
После застоя решил таки продолжить. И начну с того, что исправил метод отбора (прямо таки эвристический) похожих значений в массивах:
Добавлено через 1 минуту Затем хотелось бы спросить, для чего нужен символ ":" в коде? Добавлено через 7 минут Далее.
A = 255 ---- Как понять используется ли там альфа канал и если нет, как это обойти?
Зачем писать в память это дело(третья с конца строчка)? так быстрее обработка или что? Что происходит в третей с конца строки кроме очевидной записи в память чегото там? Добавлено через 6 минут И крайний вопрос. В чём причина завышения значения ширины и высоты изображения в буфере видеоустройства на 50? Тоесть выдаваемые ширина\высота = 320\240 а реальные 270\190. Добавлено через 24 минуты Вот что набросал. Естественно оно не работает.
И стандартный пример таки работает. Добавлено через 15 минут Сделал на основе примера
0
|
||||||||||||||||||||||||||||||||||||
|
|
|||||||||
| 30.08.2012, 21:02 | |||||||||
|
Я на элементарные вопросы отвечу
![]() Т.о. это
R = PeekA(*VCamBuf) *VCamBuf + 1
1
|
|||||||||
|
Ты за кого меня держиш!?
|
||||||
| 30.08.2012, 21:54 [ТС] | ||||||
|
Теперь видно, что BGRA там
А в памяти байты в обратном порядке чтоль? зачем их сдвигать? ... Неужель позиция в с которой считываются и в которую записываются байты у разных областей памяти одинаковая.. Добавлено через 3 минуты Почти понял, почти сознал. Добавлено через 43 секунды убейте комара!думать мешает!
0
|
||||||
|
Ты за кого меня держиш!?
|
||||||||||||||||
| 01.09.2012, 01:39 [ТС] | ||||||||||||||||
|
Опять результат:
Или при ix = 3 и ImgHeight - 1 = 189 PixAdr = 3*3 + 189*(189*3) Циферка не великовата? А картинка получается такая: \\\\\\\\\\\ \\\\ \\\\\\\\\\\\\ \\ \\\\\\\\\\\\\\ \ покосившийся квадрат. жаль геометрию в школе не учил ато точно сказал бы параллепипедом выводится изображение или паралелограммом. Смещение имеет место, а почему? Добавлено через 43 минуты Промелькнула очередная мысль
0
|
||||||||||||||||
| 01.09.2012, 21:53 | |
|
Не по теме: Мне одному кажется, что человек не совсем понимает, какие манипуляции делает с прогой?
0
|
|
|
Ты за кого меня держиш!?
|
||
| 01.09.2012, 23:10 [ТС] | ||
|
Добавлено через 23 минуты Изображение 24 битное, значит в видеобуфере значиения цветов от -128 до 127, что соответствует диапазону 0 - 256. Альфа канала судя по всему нет, так как возвращаемая "площадь" изображения (153600 байт) минус 100 и делённая на 3 равна размеру видеобуфера и значит что если даже значения цвета в видеобуфере расположены не как RGB а допустим как GRB, то всёравно запись по 3 байта на пиксель в буфер с картинкой должна быть корректной по крайней мере в расстановке пикселей по местам. У меня имеется некое смещение. Думаю что используется какой то другой формат, как выяснить какой? PeekA возращает значения без знака, это не есть хорошо. Цвета имеющие значения -128 45 128 после такого считывание становятся 128 45 128, но даже при значении 0 173 256 (+128 каждая составляющая цвета для получения диапазона 0-256) всёравно картинка остаётся как исходная в виде углеродного волокна, только уже с цветами отличающимися от серого. Чесное слово мозг сломаю пока пойму как это считывать если носом не ткнёте пару раз.
0
|
||
|
Ты за кого меня держиш!?
|
||||||||
| 01.09.2012, 23:50 [ТС] | ||||||||
|
Появилось ещё одно предположение что считывая байты из видеобуфера надо их записывать в буфер картинки функцией
Добавлено через 5 минут
Ето предположение а не факт. Но если ето факт то камеры делают придурки которым впадлу матрицу перевернуть. или драйверы пишут придурки так как матрицу перевернули, а они ещё переворачивают изображение.
0
|
||||||||
|
Ты за кого меня держиш!?
|
||||||||
| 02.09.2012, 00:10 [ТС] | ||||||||
|
Положение изображения это условность никому не нужная, а два цикла обработки нужны только функции Plot для правильного представления координат.
выдаёт от -128 до 127. Добавлено через 8 минут
0
|
||||||||
|
|
|||||||||||||
| 02.09.2012, 00:52 | |||||||||||||
|
А вот "волшебное превращение" числа -56 в число 200.
Более того, числа -56 и 200 в памяти компа хранятся в одинаковом виде (в пределах одного байта).
0
|
|||||||||||||
|
Ты за кого меня держиш!?
|
||||
| 02.09.2012, 01:46 [ТС] | ||||
Добавлено через 1 минуту x = -56 & 255 Тоже самое что x = -56 + 256 Добавлено через 37 минут
тошо 9999999999999999 тоже 11 11 11 11 - в пределах байта
0
|
||||
|
Кормпилятор
|
||||||||||||||||
| 02.09.2012, 15:56 | ||||||||||||||||
|
Полагаю вам не помешает теория по двоичному представлению чисел.
1 бит 0 - 02 бита 00 - 03 бита 000 - 0так можете продолжить до 8-ми бит и увидете, как сопоставляются числа двоичному коду. PeekA() "вытягивает" из памяти число в данном представлении. Ваше число 9999999999999999 интерпретируется в бинарном коде как: 1000111000011011110010011011111100000011 11111111111111 Посчитал я это стандартным виндовым калькулятором, в числе 54 бита и влезет оно только в восьмибайтовый тип Quad. Если вы попытаетесь его засунуть в байт(.b), то при отключенном отладчике в байт занесётся число 9999999999999999 & 255, т.е. только младший байт, т.о. вы потеряете информацию о старших разрядах числа(т.е. почти всю инфу о числе). И будет это число -1 и его битовая интерпретация 11111111 в дополнительном коде. Зачем существуют байты, слова, двойные слова и четверные слова. Затем чтобы варьировать диапазон чисел и занимаемое этими числами место в памяти. К примеру зачем сохранять четырёхбайтовые величины, если нам с лихвой хватит диапазона двухбайтовых, т.о. мы сэкономим место в памяти. Также на плечи компилятора, ложится конверт типов друг между другом и ясен пень числа большего диапазона НЕ ЗАСУНУТЬ в числа меньшего, это всё равно что в двухлитровую бутылку пытаться налить кубометр воды. Ещё надо представлять зачем нам дали байт знаковый и беззнаковый, а дали его затем, чтобы мы могли использовать разные диапазоны чисел. Диапазон чисел -128..127 НЕ РАВЕН диапазону 0..255, потому что он всего лишь частично пересекается в области положительных чисел, тут нам важно понимать что есть значение числа и что оно может быть разным и что бывают числа, которые не влезут в регистры процессора. В бинарном представлении биты читаются справа налево, также как мы читаем десятичные числа, т.е. разряды числа идут таким же образом, это важно когда мы сдвигаем биты(>>, <<). Над бинарными числами мы можем произвести побитовые логические операции Дизъюнкцию(OR), Конъюнкцию(AND), Отрицание(NOT) и исключающее ИЛИ В пюр бейсике это соответствует значкам | & ~ ! На сегодня пока хватит загрузов... Добавлено через 10 часов 7 минут
даже если формат изображения будет отличаться, т.к. функция покрывает LONG полностью.
интерпретируется не дополнительный код, а самый что ни на есть прямой.
Во-первых конъюнкция работает напрямую с битами и ей без разницы прямой код или дополнительный, а, во-вторых, функцию эту используют, чтобы выделять из числа биты. locm, в своём примере выделил из числа -56 целый байт и пофигу в каком представлении оно хранилось(4 байта знаковый integer), т.к. в итоге остались лишь первые 8 бит от него и занеслись опять же в знаковый integer, число стало положительным из-за смещения диапазона, вследствие его сокращения. Т.е. число переместилось из области, условно закреплённой за отрицательными числами, в область закреплённую за положительными числами. Почему условно? Потому что любой байт, слово, двойное слово МЫ можем интерпретировать либо как знаковое число, либо как беззнаковое. Добавлено через 32 минуты
Беззнаковое: 00000000 - 0Знаковое(доп. код): 00000000 - 0Чуете разницу?
0
|
||||||||||||||||
|
Ты за кого меня держиш!?
|
|||
| 02.09.2012, 23:32 [ТС] | |||
254 = 00000010 00000101 00000100 Добавлено через 1 минуту
0
|
|||
|
Кормпилятор
|
||||
| 03.09.2012, 00:05 | ||||
Может быть я конечно криво изложил, т.к. не писатель, поэтому можете попробовать открыть любой учебник информатики, в котором есть раздел про двоичные числа.
0
|
||||
|
|
|||||||
| 03.09.2012, 00:12 | |||||||
|
Вот чему равно ваше число в двоичной системе счисления
1
|
|||||||
|
Кормпилятор
|
|||||||
| 03.09.2012, 01:22 | |||||||
|
Давайте сделаем проще, проиллюстрирую, запустите прогу и листайте кнопочками вправо/влево
ну или колёсиком мыши, как вам удобнее и смотрите что происходит с байтом. Прога
Добавлено через 28 минут Впрочем, посмотрел я прогу от locm удобная весьма . Калькулятором в разы геморнее.
1
|
|||||||
| 03.09.2012, 01:22 | |
|
Анализ изображения с веб-камеры Захват изображения с веб-камеры Захват изображения с веб камеры Захват видео изображения с веб-камеры
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|