C# - Помощь по мультитач?USB-вход для веб-камеры?Анализ изображения?

StackOverflow https://stackoverflow.com/questions/1712939

Вопрос

Я пытаюсь сделать сенсорный экран своими руками и хотел бы представить его на местной научной ярмарке, но хотел сделать это с точки зрения программирования Multi-touch.Моя проблема заключается в том, что я никогда не работал с анализом изображений (с веб-камеры через USB).
Я бы хотел реализовать этот проект на C#, если это возможно (C++ - в худшем случае)
Мне нужно проанализировать черную картинку (с USB-веб-камеры) а затем обнаружить, когда в поле зрения появятся белые пятна. Как бы я это сделал?--- существует ли известный метод обнаружения изменений вместо анализа каждого пикселя?если да, то было бы неплохо указать, где это находится :)
Также как мне получить входные данные с веб-камеры через USB? --- где я могу получить библиотеки/ddl?
Я видел несколько программ, которые с этим работают, но конвертируют изображения, а это отнимает время и скорость процессора...Есть ли способ использовать необработанное входное изображение/данные?
ПОМОЩЬ?

Это было полезно?

Решение

Как только вы получите вводные данные (при условии, что это совершенно темный и совершенно яркий контраст), у вас будет матрица значений, подобная этой:(шкала серого)

0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 256 0 0 0 0 0
0 0 0 0 0 256 256 256 0 0 0 0
0 0 0 0 0 0 256 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 

Ваша задача должна состоять в том, чтобы выделить часть правильных значений цвета (256) и определить положение.Чтобы получить движение (при условии, что вы отслеживаете только один объект), вам придется сравнить следующую позицию капли с предыдущей.

В реальном мире, особенно с веб-камерой, вы никогда не получите сплошной темный фон с хорошим контрастом.Веб-камера имеет низкое разрешение, свет никогда не бывает идеальным, а также добавляется шум из-за дефектов объектива и ПЗС-матрицы/аппроксимации цвета.

Кроме того, у вас могут возникнуть проблемы с отслеживанием движения капель (капля может быть ошибочно обнаружена в другом месте на поверхности).Когда вы попытаетесь отследить два больших двоичных объекта, вы столкнетесь с дополнительными проблемами.

Некоторые из этих проблем включают в себя:

  1. Столкновение BLOB-объектов (как узнать, какой BLOB-объект куда идет)
  2. Пересечение капель (капли поменяли сторону или двинулись в направлении, противоположном предыдущему путешествию)
  3. Объединение BLOB-объектов (когда два BLOB-объекта становятся одним)

Чтобы захватить камеру с помощью C#, вам может понадобиться чтобы проверить это. WIA — не самый быстрый метод съемки.Однако справиться с этим гораздо проще.Я предлагаю вам, если вы все еще заинтересованы в этом, — нарисовать два изображения в фотошопе и отследить маркеры.Это не так увлекательно, но поможет вам легче справиться с проблемой и упростить описание проблемы.

Другие советы

То, что вам нужно, это «обнаружение BLOB-объектов».Вот хорошая тема про библиотека больших двоичных объектов

Уже существует куча библиотек и программного обеспечения для мультитач/компьютерного зрения.Лучший ресурс для такого рода вещей — wiki.nuigroup.com.Особенно Фреймворки и библиотеки раздел.В настоящее время там не так уж много информации о C#, но если вы что-то узнаете, обязательно разместите это в этой вики для всех.

Существует также Форум NuiGroup, раздел C# (.NET/Silverlight/WPF) это должно вам очень помочь.В этом сообществе можно оказать большую помощь.

В качестве места для начала работы с веб-камерой я бы начал здесь:

http://www.hanselman.com/blog/CapturingVideoAWebCameraUsingWIANotPossible.aspx

У вас будет несколько ссылок, по которым можно будет перейти, но я предлагаю вам начать здесь, потому что в этой статье Скотт рассказывает о различных проблемах и общих вопросах, а также предоставляет ссылки на дополнительную информацию.

Чтобы получить изображения с веб-камеры, AForge Фреймворк невероятно прост в использовании!Ознакомьтесь с примером приложения для обнаружения движения для сбора кода :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top