📄 thinning.cpp
字号:
#include "stdafx.h"
#include "cv.h"
/*
程序:图像细化
作者:sboom(Lingch)
日期:05年1月18日
*/
void xxx(IplImage* img)
{
int i,j,k,l,wc,pos;
unsigned char color=0;
int N=img->width*img->height;
int flag=1;
long x,b;
unsigned char *om=new unsigned char[N]; //标记矩阵
unsigned char *image=new unsigned char[N];
for(i=0;i<N;i++) //初始化
{
om[i]=0;
image[i]=(*(img->imageData+(i)));
}
while(flag==1) //flag=0时迭代结束
{
flag=0;
for( i=2;i<img->height-2;i++)
{
for(j=2;j<img->width-2;j++)
{
//模板a
if(image[(i-1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i-1)*(bmpi->width+skip)+j+1]==0
&& image[(i)*(bmpi->width+skip)+j-1]==0xff
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i)*(bmpi->width+skip)+j+1]==0
&& image[(i)*(bmpi->width+skip)+j+2]==0
&& image[(i+1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i+1)*(bmpi->width+skip)+j+1]==0)
{
om[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
//模板b
if(image[(i-1)*(bmpi->width+skip)+j-0]==0
&& image[(i-1)*(bmpi->width+skip)+j+1]==0
&& image[(i)*(bmpi->width+skip)+j-1]==0xff
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i)*(bmpi->width+skip)+j+1]==0
&& image[(i)*(bmpi->width+skip)+j+2]==0
&& image[(i+1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i+1)*(bmpi->width+skip)+j-0]==0xff)
{
om[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
//模板c
if(image[(i-1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i-1)*(bmpi->width+skip)+j-0]==0xff
&& image[(i)*(bmpi->width+skip)+j-1]==0xff
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i)*(bmpi->width+skip)+j+1]==0
&& image[(i)*(bmpi->width+skip)+j+2]==0
&& image[(i+1)*(bmpi->width+skip)+j-0]==0
&& image[(i+1)*(bmpi->width+skip)+j+1]==0)
{
om[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
//模板d
if(image[(i-1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i-1)*(bmpi->width+skip)+j-0]==0xff
&& image[(i-1)*(bmpi->width+skip)+j+1]==0xff
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i+1)*(bmpi->width+skip)+j-1]==0
&& image[(i+1)*(bmpi->width+skip)+j-0]==0
&& image[(i+1)*(bmpi->width+skip)+j+1]==0)
{
om[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
//模板e
if(image[(i-1)*(bmpi->width+skip)+j-1]==0
&& image[(i-1)*(bmpi->width+skip)+j+1]==0xff
&& image[(i)*(bmpi->width+skip)+j-1]==0
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i)*(bmpi->width+skip)+j+1]==0xff
&& image[(i+1)*(bmpi->width+skip)+j-1]==0
&& image[(i+1)*(bmpi->width+skip)+j+1]==0xff)
{
om[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
//模板f
if(image[(i-1)*(bmpi->width+skip)+j-0]==0
&& image[(i)*(bmpi->width+skip)+j-1]==0
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i)*(bmpi->width+skip)+j+1]==0xff
&& image[(i+1)*(bmpi->width+skip)+j-0]==0xff
&& image[(i+1)*(bmpi->width+skip)+j+1]==0xff)
{
om[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
//模板g
if(image[(i-1)*(bmpi->width+skip)+j-0]==0xff
&& image[(i-1)*(bmpi->width+skip)+j+1]==0xff
&& image[(i)*(bmpi->width+skip)+j-1]==0
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i)*(bmpi->width+skip)+j+1]==0xff
&& image[(i+1)*(bmpi->width+skip)+j-0]==0)
{
om[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
//模板h
if(image[(i-2)*(bmpi->width+skip)+j-0]==0
&& image[(i-1)*(bmpi->width+skip)+j-1]==0
&& image[(i-1)*(bmpi->width+skip)+j-0]==0
&& image[(i-1)*(bmpi->width+skip)+j+1]==0
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i+1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i+1)*(bmpi->width+skip)+j-0]==0xff
&& image[(i+1)*(bmpi->width+skip)+j+1]==0xff)
{
om[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
}
}
for(i=0;i<N;i++)
{
if(om[i]==0xff)
{
image[i]=0xff;
}
}
}
//-------------第二次串行细化
for( i=2;i<bmpi->height-2;i++)
{
for(j=2;j<bmpi->width-2;j++)
{
//缩小后的模板a
if(image[(i-1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i-1)*(bmpi->width+skip)+j+1]==0
&& image[(i)*(bmpi->width+skip)+j-1]==0xff
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i)*(bmpi->width+skip)+j+1]==0
&& image[(i+1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i+1)*(bmpi->width+skip)+j+1]==0)
{
image[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
//缩小后的模板h
if(image[(i-1)*(bmpi->width+skip)+j-1]==0
&& image[(i-1)*(bmpi->width+skip)+j-0]==0
&& image[(i-1)*(bmpi->width+skip)+j+1]==0
&& image[(i)*(bmpi->width+skip)+j-0]==0
&& image[(i+1)*(bmpi->width+skip)+j-1]==0xff
&& image[(i+1)*(bmpi->width+skip)+j-0]==0xff
&& image[(i+1)*(bmpi->width+skip)+j+1]==0xff)
{
image[(i)*(bmpi->width+skip)+j]=0xff;
flag=1;
continue;
}
}
}
//---------------显示图形
for( i=0;i<bmpi->height;i++)
{
for(j=0;j<bmpi->width;j++)
{
//-----原始图形
color=image[(i)*(bmpi->width+skip)+j];
tc=SwitchColor(color,color,color);
Form1->Canvas->Pixels[10+j][400-i]=*tc;
}
}
//----------关闭文件
fclose(f);
}
//------------------------------------------------------------------------
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -