您的位置:首页 > 编程语言 > MATLAB

opencv实现matlab imclearborder函数功能,去二值图边界的连通域。

2015-08-31 10:32 1091 查看
由于本人做的课程设计需要去掉靠近左右边缘的连通域。以前用matlab有 imclearborder这个函数。opencv并没有,于是自己写了一下。由于本人比较懒嫌麻烦于是只写了4连通域的而且程序写的也不怎么标准,大家可以按自己需求修改一下

//迭代去除4联通域
void test(uchar *p,int ncol){
p[0]=0;//当前像素置0
while(p[1]){
test(p+1,ncol);
}
while(p[-ncol]){
test(p-ncol,ncol);
}
while(p[ncol]){
test(p+ncol,ncol);
}
while(p[-1]){
test(p-1,ncol);
}

}
//去除靠边界的4连通域
Mat clearEdge(Mat &src){
Mat dst;
src.copyTo(dst);
dst=dst.t(); //装置是为了个人习惯指针方便一点
int nrow=dst.rows;
int ncol=dst.cols;
uchar *ipt=dst.ptr<uchar>(1);
uchar *ipt1=dst.ptr<uchar>(nrow-2);
for(int i=1;i<=ncol-2;i++)
{
if(ipt1[i]){
test(ipt1+i,ncol);

}
}
for(int i=1;i<=ncol-2;i++)
{
if(ipt[i]){
test(ipt+i,ncol);

}
}
return dst.t();//别忘了转回来
}
为了不指针越界

copyMakeBorder(img3,img4,1,1,1,1,BORDER_CONSTANT,Scalar(0) );

给图像四周都加了一个0值像素

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: