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

_>Здравствуйте, 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...
Пока на собственное сообщение не было ответов, его можно удалить.