OpenCV计算水平线中的像素数

时间:2014-10-25 10:58:12

标签: c++ opencv image-processing

我希望在二进制图像的每一行中找到白色像素的数量。如果该计数大于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;
}

1 个答案:

答案 0 :(得分:0)

默认情况下imread会返回3个频道的BGR图像。如果要加载灰度/二进制图像,请使用cv::IMREAD_GRAYSCALE参数:

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