Re[13]: Разбить картинку на блоки
От: vit_as Россия  
Дата: 30.05.12 16:44
Оценка:
Здравствуйте, revaldo666, Вы писали:



R>С этим я сегодня и столкнулся, на изображении свыше 100х100 переполняется стэк. Однако как тогда обойти пиксели картинки?

R>Вот как сделал я

R>
R> private void checkImage(int r,int e,Bitmap img,ref bool[,] ch)
R>        {
R>            if (e < 0 || r < 0 || r>=img.Width ||e>=img.Height)
R>                return;
R>            if (ch[r, e] == true)
R>                return;
R>            ch[r, e] = true;
R>            checkImage(r + 1, e,img, ref ch);
R>            checkImage(r, e+1,img, ref ch);
R>            checkImage(r - 1, e,img, ref ch);
R>            checkImage(r, e-1,img, ref ch);
R>        }

R>

Создаете бинарное изображение, т.е. изображение состоящее из 0 (фон) и 1 (объекты). На вашем рисунке фон белый, объекты черные и красные.
Пробегаете по картинке слева направо, сверху вниз. Как только встречается переход с фона на объект, начинаете обход контура, координаты точек контура пишете в лист, на бинарном помечаете -1 те точки, которые вы обошли, чтобы второй раз к ним не возвращаться, никаких рекурсий здесь не надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.