opencv对二值图像画框_opencv实现二值图像细化的算法

本文介绍了OpenCV中的细化算法,该算法用于将二值图像进行骨架化处理。通过cvThin函数,进行迭代操作,遍历图像并依据特定条件更新像素,以达到细化效果。详细解释了函数参数和工作原理。
摘要由CSDN通过智能技术生成

细化算法通常和骨骼化、骨架化算法是相同的意思,也就是thin算法或者skeleton算法。虽然很多图像处理的教材上不是这么写的,具体原因可以看这篇论文,Louisa

Lam, Seong-Whan Lee, Ching Y. Suen,“Thinning Methodologies-A

Comprehensive Survey ”,IEEE TRANSACTIONS ON PATTERN ANALYSIS AND

MACHINE INTELLIGENCE, VOL. 14, NO. 9, SEPTEMBER 1992

,总结了几乎所有92年以前的经典细化算法。

函数:void cvThin( IplImage* src, IplImage* dst, int

iterations=1)

功能:将IPL_DEPTH_8U型二值图像进行细化

参数:src,原始IPL_DEPTH_8U型二值图像

dst,目标存储空间,必须事先分配好,且和原图像大小类型一致

iterations,迭代次数

参考文献:T. Y. Zhang and C. Y. Suen, “A fast parallel algorithm for

thinning digital patterns,” Comm. ACM, vol. 27, no. 3, pp. 236-239,

1984.

void cvThin( IplImage* src, IplImage* dst, int iterations=1)

{

CvSize size = cvGetSize(src);

cvCopy(src, dst);

int n = 0,i

= 0,j = 0;

for(n=0; n

{

IplImage* t_image = cvCloneImage(dst);

for(i=0;

i

{

for(j=0;

j

{

if(CV_IMAGE_ELEM(t_image,byte,i,j)==1)

{

int ap=0;

int p2 = (i==0)?0:CV_IMAGE_ELEM(t_image,byte, i-1, j);

int p3 = (i==0 || j==size.width-1)?0:CV_IMAGE_ELEM(t_image,byte,

i-1, j+1);

if (p2==0 && p3==1)

{

ap++;

}

int p4 =

(j==size.width-1)?0:CV_IMAGE_ELEM(t_image,byte,i,j+1);

if(p3==0 && p4==1)

{

ap++;

}

int p5 = (i==size.height-1 ||

j==size.width-1)?0:CV_IMAGE_ELEM(t_image,byte,i+1,j+1);

if(p4==0 && p5==1)

{

ap++;

}

int p6 =

(i==size.height-1)?0:CV_IMAGE_ELEM(t_image,byte,i+1,j);

if(p5==0 && p6==1)

{

ap++;

}

int p7 = (i==size.height-1 ||

j==0)?0:CV_IMAGE_ELEM(t_image,byte,i+1,j-1);

if(p6==0 && p7==1)

{

ap++;

}

int p8 = (j==0)?0:CV_IMAGE_ELEM(t_image,byte,i,j-1);

if(p7==0 && p8==1)

{

ap++;

}

int p9 = (i==0 ||

j==0)?0:CV_IMAGE_ELEM(t_image,byte,i-1,j-1);

if(p8==0 && p9==1)

{

ap++;

}

if(p9==0 && p2==1)

{

ap++;

}

if((p2+p3+p4+p5+p6+p7+p8+p9)>1

&&

(p2+p3+p4+p5+p6+p7+p8+p9)<7)

{

if(ap==1)

{

if(!(p2 && p4

&& p6))

{

if(!(p4 && p6

&& p8))

{

CV_IMAGE_ELEM(dst,byte,i,j)=0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值