【发布时间】:2014-10-25 10:58:11
【问题描述】:
我希望在二进制图像的每一行中找到白色像素的数量。如果该计数大于 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;
}
【问题讨论】:
-
阈值化后检查图像。难道计数永远不会>90?
-
当前使用的图像尺寸为 4096*3072。我已经在 matlab 中开发了类似的代码,并希望在 openCV 中实现它
-
代码看起来没有问题。如果可能,请发布输入图像、二值图像和输出图像。
-
请发布输入/阈值/输出。如果您没有足够的声誉在 SO 上上传图片,请使用图片托管平台
-
请注意,jet47 的回答是正确的,cv::threshold 需要灰度图像作为输入才能实现预期的行为!!
标签: c++ opencv image-processing