Проблема с ручным размыванием изображения в openCV c ++ (двоичное изображение) - PullRequest
0 голосов
/ 27 октября 2019

Я пишу ручной код для эрозии или расширения. И я не знаю, почему следующий код не работает.

Как видите, когда я нахожусь в точке (i, j), я обхожу эту точку и ищу любой белый пиксель. Если есть какой-либо (в матрице Литтл 3х3 (ii, jj)) белый пиксель, я меняю свою точку (i, j) на белый.

Кто-нибудь знает, почему он не работает?

Я убедился, что загружаю двоичное изображение. Если я посчитаю белые и черные пиксели, то получу нужное количество пикселей.

 for (int i=1; i<gray.cols-1; i++)
    {
        for(int j=1; j<gray.rows-1; j++)
            {
                ii=i;
                jj=j;

                for (ii-1; ii<i+2; ii++ )
                {
                    for (jj-1; jj<j+2; jj++ )
                    {

                        if (gray.at<uchar>(ii,jj) ==255)
                            gray.at<uchar>(i,j) = 255;
                    };
                };
};

Если у кого-нибудь есть идеи, как это сделать по-другому?

1 Ответ

0 голосов
/ 27 октября 2019

Вы должны создать временное изображение для записи результатов эрозии / расширения. Ваша проблема в том, что вы пишете в исходное изображение. Предположим, что только первый пиксель является белым. На первой итерации второй цвет пикселя будет белым. И затем во второй итерации вы посмотрите на недавно окрашенный второй пиксель и раскрасите третий пиксель в белый. И так далее для всех пикселей в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...