Я хочу найти количество белых пикселей в каждой строке бинарного изображения. И если этот счет больше 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;
}
По умолчанию imread
возвращает 3-канальное изображение BGR. Если вы хотите загрузить изображение в оттенках серого/двоичного изображения, используйте параметр cv::IMREAD_GRAYSCALE
:
cv::Mat I = cv::imread("abc.bmp", cv::IMREAD_GRAYSCALE);