一种细化算法及其与opencv的实现_第1页
一种细化算法及其与opencv的实现_第2页
一种细化算法及其与opencv的实现_第3页
一种细化算法及其与opencv的实现_第4页
一种细化算法及其与opencv的实现_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一种细化算法及其与 opencv 的实现 是根据图像中像素点得八个相邻点得情况,得到一个索 引值,然后查表,如果为 0 怎保留该点,否则删除 算法代码: cpp view plaincopy #include stdafx.h #include cv.h #include highgui.h #include cxcore.h #includeiostream #includefstream #includeiomanip using namespace std; static int erasetable256 = 0,0,1,1,0,0,1,1, 1,1,0,1,1,1,0,1, 0,0,

2、1,1,0,0,1,1, 1,1,0,0,1,1,1,1, 1,1,0,0,1,1,0,0, 0,0,0,0,0,0,0,0, 1,1,0,0,1,1,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,0,0,1,1, 1,1,0,0,1,1,1,1, 0,0,1,1,0,0,1,1, 1,1,0,0,1,1,1,1, 1,1,0,0,1,1,0,0, 1,1,0,0,1,1,1,1, 1,1,0,0,1,1,0,0, 1,1,0,0,1,1,1,0, 1,1,0,1,1,1,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0

3、, 1,1,0,1,1,1,0,1, 0,0,0,0,0,0,0,0, 1,1,0,1,1,1,0,1, 0,0,0,0,0,0,0,1, 1,1,0,1,1,1,0,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,1,0,1,1,1,0,0, 1,1,0,0,1,0,0,0 0 则保留, fan ;/ 这个表是检测是用来细化黑色点边缘的,若为 否则删除,如果用来细化白色点边缘的话就取 /* * *888 函数名: save 参数类型: void 功能:保存细化查询表 * * void save() fstream writefi

4、le(erasetable.txt , ios:out); int n=0; for(int i=0;i256;i+) writefilesetw(2)erasetablei; writefileendl; /* *88 函数名: npow 参数类型: int n 功能:求 2 的 n 次方并返回结果 返回值类型: int * */ int npow(int n) int mul = 1; for(int i=0;in;i+) mul *= 2; return mul; /* * 函数名: Threshold 参数类型: IplImage *src , int lower , int high

5、er 功能:二值化灰度图像 * */ void Threshold(IplImage *src , int lower , int higher) assert(src-nChannels=1); for(int h=0;hsrc-height;h+) for(int w=0;wsrc-width;w+) if(*(src-imageData +h*src-widthStep+w)0*(src-imageD ata+h*src-widthStep+w)87) *(src-imageData +h*src-widthStep+w) = 255; else *(src-imageData +h*s

6、rc-widthStep+w) = 0; /* *8 函数名: scantable 参数类型: IplImage *src 功能:扫描像素 8 领域周围的八个像素值(只检测白色点得 周围),像素值为 0置 1,否则为 0,并保存(如果是检测黑 色的周围的话就相反) , 再根据得到的数,将得到的数看做一个二进制数化为十进制 的数,这个值即为查询索引,如果查到的值为 0 则保留,否 则删除 * */ void scantable(IplImage *src) assert(src-nChannels=1); int scan8 = 0; for(int h=1;h(src-height-1);h+

7、) for(int w=1;w(src-width-1);w+) int index = 0; if(*(src-imageData+(h)*src-widthStep+w)!=0) if(*(src-imageData+(h-1)*src-widthStep+w-1)=0) scan0 = 1; else scan0 = 0; if(*(src-imageData+(h-1)*src-widthStep+w)=0) scan1 = 1; else scan1 = 0; if(*(src-imageData+(h-1)*src-widthStep+w+1)=0) scan2 = 1; else

8、 scan2 = 0; if(*(src-imageData+(h)*src-widthStep+w-1)=0) scan3 = 1; else scan3 = 0; if(*(src-imageData+(h)*src-widthStep+w+1)=0) scan4 = 1; else scan4 = 0; if(*(src-imageData+(h+1)*src-widthStep+w-1)=0) scan5 = 1; else scan5 = 0; if(*(src-imageData+(h+1)*src-widthStep+w)=0) scan6 = 1; else scan6 = 0

9、; if(*(src-imageData+(h+1)*src-widthStep+w+1)=0) scan7 = 1; else scan7 = 0; for(int i=0;i8;i+) index += scani*npow(i); / printf(%dn ,index); if(erasetableindex = 1) /printf(%dn , erasetableindex); *(src-imageData+h*src-widthStep+w) = 0; int _tmain(int argc, _TCHAR* argv) save(); IplImage *img = 0; I

10、plImage *gray = 0; IplImage *copy_gray = 0; int vmin = 0; int vmax = 0; img = cvLoadImage(1.bmp , 1); gray = cvCreateImage(cvGetSize(img) , 8 , 1); copy_gray = cvCreateImage(cvGetSize(img) , 8 ,1); cvCvtColor(img , gray , CV_BGR2GRAY); cvSmooth(gray , gray , CV_MEDIAN , 3 , 0 , 0 , 0); cvNamedWindow(gray , 1); cvNamedWindow(erase , 1); /cvCreateTrackbar(lower , gray , vmin , 256 , 0); /cvCreateTrackbar(higher , gray , vmax , 256 , 0); Threshold(gray , vmin , vmax); cvCopy(gray , copy_gray); scantable(copy_g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论