我希望在二进制图像的每一行中找到白色像素的数量。如果该计数大于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 :(得分:0)
默认情况下imread
会返回3个频道的BGR图像。如果要加载灰度/二进制图像,请使用cv::IMREAD_GRAYSCALE
参数:
cv::Mat I = cv::imread("abc.bmp", cv::IMREAD_GRAYSCALE);