Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с видео - сравнение видео кадров, нужна помощь 
:(
    Опции темы
Riccon
Дата 14.11.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.5.2004

Репутация: нет
Всего: нет



Здравствуйте.
Мне нужно сделать что-то вроде "детектора движения".  Нужно сравнивать кадры в видеопотоке, и закрашивать белым цветом только те участки, которые отличают текущую картинку от предыдущей, а остальное закрасить черным цветом.  В качестве опытного материала выступает авишка.

Действия преподлагаются такие:

1. Последовательность выводится в черно-белом режиме.
2. Далее, взяв порог серого, скажем 50, пробежаться по пикселям кадра N, переназначая цвета: 
              цвет пикселя = ( цвет пикселя > 50 ) ?  сделать пиксел белым : сделать пиксел черным
3. Дальше сравниваем две картинки. Смотрим разницу.
4. Показываем на форме только разницу. Всё остальное считаем шумом и красим в чёрный цвет.

Вот, собственно. С графикой не работал никогда, и не знаю инструментов посредством которых такое можно эффективно(без тормозов) проделать. Подскажите плз, куда копать. 
PM MAIL   Вверх
1stain
Дата 14.11.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 4
Всего: 40



по-моему, исходя из смутных восмоминаний о API, без тормозов можно сделать через BitBlt смотреть здесь
к тому же, можно будет избавицца от пункта 2: берем соседнгие кадры, BitBlt с dwRop = PATINVERT и как итог - получаем разницу.

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

а получилось только так
Код

        private void button3_Click(object sender, EventArgs e)
        {
            Bitmap bmp1 = (Bitmap)img1;
            Bitmap bmp2 = (Bitmap)img2;
            MyColorComparer comparer = new MyColorComparer(20);
            for (int x = 0; x < img1.Width; ++x)
            {
                for (int y = 0; y < img2.Height; ++y)
                {
                    Color c1 = bmp1.GetPixel(x, y);
                    Color c2 = bmp2.GetPixel(x, y);
                    if (comparer.Compare(c1, c2) != 0)
                        bmp1.SetPixel(x, y, c2);
                    else
                        bmp1.SetPixel(x, y, Color.White);
                }
            }
            pictureBox1.Image = bmp1;
        }

        public class MyColorComparer : IComparer<Color>
        {
            private int diff;
            public MyColorComparer(int difference)
            {
                diff = difference;
            }

            public int Compare(Color x, Color y)
            {
                if (Math.Abs(x.R - y.R) > diff)
                    return 1;
                if (Math.Abs(x.G - y.G) > diff)
                    return 1;
                if (Math.Abs(x.B - y.B) > diff)
                    return 1;
                if (Math.Abs(x.A - y.A) > diff)
                    return 1;
                return 0;
            }
        }


во только тормоза здесь наверняка будут аццкие

Это сообщение отредактировал(а) 1stain - 14.11.2007, 18:20


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1309 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.