OpenCV подсчитывает количество пикселей по горизонтали

0

Я хочу найти количество белых пикселей в каждой строке бинарного изображения. И если этот счет больше 90, я хочу удалить всю строку, изменив значение каждого пикселя в этой строке на 0. Код, который я написал, не работает. И, судя по всему, я получаю одно и то же двоичное изображение на выходе. Пожалуйста, помогите мне решить проблему. Кстати, я использую openCV 2.0.

using namespace std;

double a = 15;

double b = 255;

Mat I1;

int main(int argv, char **argc)

{

    cv: Mat I = imread("abc.bmp");

    if (I.empty())

    {

        std::cout << "!!! Failed imread(): image not found" << std::endl;

    }

    threshold(I, I1, a, b, THRESH_BINARY);


    int r = I.rows;

    int c = I.cols;

    for (int j = 0; j < r; j++)

    {

        int count = 0;

        for (int i = 0; i < c; i++)

        {

            if (I1.at<uchar>(j, i) == 255)

                count = count + 1;

        }

        if (count > 90)

        {

            for (int i = 0; i < c; i++)

                I1.at<uchar>(j, i) = 0;

        }

    }
    namedWindow("Display window", 0);// Create a window for display.

    imshow("Display window", I1);


    waitKey(0);

    return 0;
}
  • 0
    Проверьте изображение после установки порога. Может ли быть так, что количество никогда не превышает 90?
  • 0
    Размер изображения, с которым я работаю - 4096 * 3072. Я разработал подобный код в Matlab и хочу реализовать его в OpenCV
Показать ещё 4 комментария
Теги:
opencv
image-processing

1 ответ

0

По умолчанию imread возвращает 3-канальное изображение BGR. Если вы хотите загрузить изображение в оттенках серого/двоичного изображения, используйте параметр cv::IMREAD_GRAYSCALE:

cv::Mat I = cv::imread("abc.bmp", cv::IMREAD_GRAYSCALE);
  • 0
    Команда cv :: IMREAD_GRAYSCALE не помогает. Все еще возникают проблемы ..
  • 0
    cv :: Mat I = imread ("abc.bmp", 0); помог .. Спасибо большое :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню