自己验证的一片扯淡的骨架提取论文
2013-08-02 10:49
417 查看
基于数学形态学的汉字骨架提取算法 程志君1 杨德强2 这篇论文的效果号称的效果图如下:
我经过自己的验证,写的程序如下,如果我的理解有错误,还请各位写评论啊,
#include<opencv\cv.h>
#include<opencv\highgui.h>
void main()
{
IplImage *img = cvLoadImage("hello.jpg",0);
IplImage *skele = cvCreateImage(cvGetSize(img),8,1);
cvZero(skele);
IplImage *open = cvCreateImage(cvGetSize(img),8,1);
bool isEnd = false;
int count = 0;
int array_cross[] ={ 0, 0xff, 0,
0xff,0xff, 0xff,
0 ,0xff, 0
};
int arrayRect[]= { 0xff, 0xff, 0xff,
0xff, 0xff, 0xff,
0xff, 0xff, 0xff
};
IplConvKernel * rectCross= cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_CROSS,array_cross);
IplConvKernel* rectRect = cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_RECT,arrayRect);
cvShowImage("开始的图像",img);
//具体的运算过程。
for(count =0;isEnd ==false;count++)
{
cvErode(img,img,rectCross,count);
//cvMorphologyEx(img,open,NULL,rectCross,CV_MOP_OPEN,1);
cvMorphologyEx(img,open,NULL,rectRect,CV_MOP_OPEN,1);
isEnd = true;//首先假设到了结束的条件
for(int i=0;i<img->height;i++)
{
uchar *ptrErode = (uchar *)(img->imageData+i*img->widthStep);
uchar *ptrOpen = (uchar *)(open->imageData+i*open->widthStep);
uchar *ptrSkele = (uchar *)(skele->imageData+i*skele->widthStep);
for(int j=0;j<img->width;j++)
{
if( *(ptrErode+j) == 0xff
&& *(ptrOpen+j) ==0
)
{
//isEnd = false;
*(ptrSkele+j) = 0xff;
}//if
if(*(ptrErode +j) == 0xff)
{
isEnd = false;
}//if
}//width
}//for height
}//end
cvShowImage("img",img);
cvShowImage("skele",skele);
//cvShowImage("img",img);
//IplConvKernel * rectCross= cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_CROSS,array_cross);
////cvErode(img,img,rectCross,num);//形态学被腐蚀运算。
//cvMorphologyEx(img,img,NULL,rectCross,CV_MOP_OPEN,count);//形态学开运算。
//cvShowImage("腐蚀",img);
cvWaitKey();
//释放内存。
cvReleaseStructuringElement(&rectCross);
cvReleaseImage(&skele);
cvReleaseImage(&open);
cvReleaseImage(&img);
}
我的运行效果如下:
原始图片:
最终提取的骨架:
可以看出有骨架都被分离开了。根本提取不出完整的骨架。,希望以后大家不要再上当了,
我经过自己的验证,写的程序如下,如果我的理解有错误,还请各位写评论啊,
#include<opencv\cv.h>
#include<opencv\highgui.h>
void main()
{
IplImage *img = cvLoadImage("hello.jpg",0);
IplImage *skele = cvCreateImage(cvGetSize(img),8,1);
cvZero(skele);
IplImage *open = cvCreateImage(cvGetSize(img),8,1);
bool isEnd = false;
int count = 0;
int array_cross[] ={ 0, 0xff, 0,
0xff,0xff, 0xff,
0 ,0xff, 0
};
int arrayRect[]= { 0xff, 0xff, 0xff,
0xff, 0xff, 0xff,
0xff, 0xff, 0xff
};
IplConvKernel * rectCross= cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_CROSS,array_cross);
IplConvKernel* rectRect = cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_RECT,arrayRect);
cvShowImage("开始的图像",img);
//具体的运算过程。
for(count =0;isEnd ==false;count++)
{
cvErode(img,img,rectCross,count);
//cvMorphologyEx(img,open,NULL,rectCross,CV_MOP_OPEN,1);
cvMorphologyEx(img,open,NULL,rectRect,CV_MOP_OPEN,1);
isEnd = true;//首先假设到了结束的条件
for(int i=0;i<img->height;i++)
{
uchar *ptrErode = (uchar *)(img->imageData+i*img->widthStep);
uchar *ptrOpen = (uchar *)(open->imageData+i*open->widthStep);
uchar *ptrSkele = (uchar *)(skele->imageData+i*skele->widthStep);
for(int j=0;j<img->width;j++)
{
if( *(ptrErode+j) == 0xff
&& *(ptrOpen+j) ==0
)
{
//isEnd = false;
*(ptrSkele+j) = 0xff;
}//if
if(*(ptrErode +j) == 0xff)
{
isEnd = false;
}//if
}//width
}//for height
}//end
cvShowImage("img",img);
cvShowImage("skele",skele);
//cvShowImage("img",img);
//IplConvKernel * rectCross= cvCreateStructuringElementEx(3,3,1,1,CV_SHAPE_CROSS,array_cross);
////cvErode(img,img,rectCross,num);//形态学被腐蚀运算。
//cvMorphologyEx(img,img,NULL,rectCross,CV_MOP_OPEN,count);//形态学开运算。
//cvShowImage("腐蚀",img);
cvWaitKey();
//释放内存。
cvReleaseStructuringElement(&rectCross);
cvReleaseImage(&skele);
cvReleaseImage(&open);
cvReleaseImage(&img);
}
我的运行效果如下:
原始图片:
最终提取的骨架:
可以看出有骨架都被分离开了。根本提取不出完整的骨架。,希望以后大家不要再上当了,
相关文章推荐
- jQuery validate 根据 asp.net MVC的验证提取简单快捷的验证方式(jquery.validate.unobtrusive.js)
- 数据解析:从某种格式的数据中提取自己所需的数据
- 骨架提取算法
- 自己yy的中缀表达式转后缀表达式(未验证完全正确)
- 如何推销自己的论文(水货级)
- 如何推销自己的论文(水货级)--西米的blog
- Android studio把一段代码快速提取,放在自己定义方法里面的快捷键
- 自己写通用表单验证插件
- 给自己一片悬崖
- 给自己降降级你会发现一片广阔的天空
- 打算给自己两个月的时间把论文发出来,加油
- linux下安装vsftp(自己验证)
- Matlab/OpenCV自己实现Harris特征点提取和匹配
- AJAX学习 自己动手写ajax登录验证及首页数据绑定(代码片段,主要是登录js,ajax的get和post请求)
- 关于Java字符串中提取自己想要的数据进行计算
- 当爱已逝,给自己一片晴空
- File.Copy是Copy完再执行下一句的,自己验证过了。
- 从Google人工智能DeepMind团队的AlphaGo的论文算法提取的学习方法:大脑逻辑结构图
- jQuery validate 根据 asp.net MVC的验证提取简单快捷的验证方式(jquery.validate.unobtrusive.js)
- 自己动手创建Web测试验证规则