//局部阈值处理 3x3
void adaptiveThreshold(Mat &img,double b)
{
Mat im;
im = img.clone();
int i,j,k;
//行列
int row = img.rows;
int col = img.cols;
//8邻域、均值
uchar n[9];
double m;
//遍历图像
uchar *p0,*pp,*p1,*p;
for(i = 1; i < row-1; ++i)
{
//读取图像数据
p0 = im.ptr<uchar>(i-1);
pp = im.ptr<uchar>(i);
p1 = im.ptr<uchar>(i+1);
//修改原图
p = img.ptr<uchar>(i);
for (j = 1; j < col-1; ++j)
{
m = 0;
//3x3 八邻域
n[0] = p0[j-1];
n[1] = p0[j];
n[2] = p0[j+1];
n[3] = pp[j-1];
n[4] = pp[j];
n[5] = pp[j+1];
n[6] = p1[j-1];
n[7] = p1[j];
n[8] = p1[j+1];
//计算均值
for(k = 0;k < 9;k++)
{
m += n[k];
}
m = m / 9 - b;
if(n[4] > m)
p[j] = 255;
else
p[j] = 0;
}
}
im.release();
}
opencv 简单的实现局部阈值处理
最新推荐文章于 2024-08-15 11:03:28 发布