Крайний правый черный пиксель

У меня есть черно-белое изображение, и меня интересует только нахождение позиции x самого дальнего правого черного пикселя, но я не знаю, как поступить. Любая помощь будет оценена. О, и я использую CImg и VC2008.

Хорошо, я чувствую себя довольно глупо, так как я не понимал, что циклы могут быть повторены в обратном направлении. В любом случае, вот что я имею сейчас.

int right_edge(CImg<unsigned char> bw)
{
    int width = bw.width();
    int height = bw.height();
    for( int i=height; i>0; i-- ){
        for( int j=width; j>0; j-- ){
            if( bw[j,i] == (0,0,0) )     //I know this line is the problem
                cout << j << endl;
            return 0;
        }
    }
}    

Код компилируется, но не выводится, как ожидалось. Я знаю, что строка с оператором if отформатирована неправильно. Я перепробовал целую кучу результатов Google, но, похоже, ничего не получилось (т.е. я, наверное, испортил)

1 ответ

Решение

Простой алгоритм psuedocode:

for each column of pixels (starting from the rightmost column, moving left)
    for each row
        if this pixel is black
            return x coordinate of column

Я намеренно опускаю подробности, так как это кажется домашним заданием, и с вашей стороны не было предпринято никаких усилий. Но этого должно быть достаточно, чтобы вы начали.

Другие вопросы по тегам