|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
|
Распознать наличие рукописной "галочки" в определенном квадрате
Добрый день. Есть такая задача - нужно распознать наличие рукописной "галочки" в определенном квадрате.
Как видно на представленных ниже скриншотах, есть 10 квадратов в которых могут находиться "галочки". Как можно найти в каком из квадратов они есть? Абсолютная точность не нужна. Как мне кажется, нужно разбить данную BitmapData на сектора, выбрать пиксели в каждом секторе и найти, есть ли в нем пиксели с RGB отличной от бело-серого фона-шума. Собственно вопрос, в какую сторону копать, чтобы алгоритм был довольно шустр и как отделить бело-серый шум? --- --- ---
__________________
Я просто добрый шутник. |
|
|||||
Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
|
Что-то вроде этого?
var b:BitmapData = new BitmapData(); //тут наша картинка var v:Vector.<uint> = b.getVector(new Rectangle(0, 0, 100, 100));//получаем список пикселей из 1 квадрата var avg:uint = this._getSumm(v) / v.length; // получаем средний цвет (складываем все цвета и делим на общее кол-во цветов), наверное это будет затратно по ресурсам var length:uint = v.length; for(var i:uint = 0; i < length; i++){ var color:uint = v[i]; color - avg //а что дальше? } Только как указать правильно значение цвета если фон там не чисто белый.
__________________
Я просто добрый шутник. |
|
|||||
такой вариант:
// картинка var bmp:Bitmap = new embedImage() as Bitmap; //addChild(bmp); var bmd:BitmapData = bmp.bitmapData; // клетка var rec:Rectangle = new Rectangle(166, 1, 48, 32); //var rec:Rectangle = new Rectangle(118, 1, 48, 32); // битмап цвета фона var bmd1:BitmapData = new BitmapData(rec.width, rec.height, false, 0xFFFFFF); // рисуем в него клетку с BlendMode.DIFFERENCE var mtrx:Matrix = new Matrix(); mtrx.translate(-rec.x, -rec.y); bmd1.draw(bmd, mtrx, null, BlendMode.DIFFERENCE); // смотрим по синему каналу с какой-то точностью есть ли что-то var tol:int = 32; var num:int = bmd1.threshold(bmd1, bmd1.rect, new Point(), ">", tol, 0, 0xFF); trace( "num : " + num ); |
|
|||||
Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
|
Спасибо, с попробовал сделать по среднему цвету, на примере этого - http://www.flasher.ru/forum/archive/.../t-123478.html
Сейчас тестирую, пока точность попадания 100%
__________________
Я просто добрый шутник. |
Часовой пояс GMT +4, время: 17:54. |
|
« Предыдущая тема | Следующая тема » |
|
|