2008年(909)
分类:
2008-05-06 22:48:48
下载源代码
引言
感谢VCKBASE以及其中无数的大大们提供了如此多的实实在在的开源代码,使我一个在学校的学生能够接触到一些实实在在的东西.想来自己潜水也有一载了.如今眼瞅毕业了即将成为无业游民,投篇拙文留个纪念.顺便感叹一下前途的迷茫.
言归正传,写这个程序主要是由于毕业设计,放在学校档案室如土不如拿上来给大家分享.其实主要功能是对图象利用canny算子进行边缘检测.以及其他一些比较基本的滤镜功能.
主要应用了GDI 所以图象格式处理与显示都比较容易.主要思想是转化为一个bmp位图矩阵,然后对这个矩阵用一些算子进行操作,这些算子大多都能在网上找到现成的资料,所以不在这里赘言了.
顺便提一下canny算子只有c函数的.理论依据对数学要求颇高,我也没深入研究下去所以边缘查找的效果有时候并不是非常的好,容易检测出一些多余的东西.
编程实现:
原图
Canny算子找边缘的实现,canny算子的代码请看源文件 或者网上搜 canny算子进行提取边缘之前先要对图象进行黑白处理。
void CFigureView::OnPsCanny() { // TODO: 在此添加命令处理程序代码 CWaitCursor WaitCursor; int nWidth = m_imageFile.GetWidth(); int nHeight= m_imageFile.GetHeight(); // 开辟内存,存储图象数据 unsigned char * pUnchImage = new unsigned char[nWidth*nHeight]; // 将图像数据保存在矩阵当中 for(int y = 0;yCanny算子效果:>16)?0:255; g = (0x000000ff&pUnchEdge[y*nWidth x]>>8)?0:255; b = (0x000000ff&pUnchEdge[y*nWidth x])?0:255; Result = ((r g b)/3); m_imageFile.SetPixelRGB(x,y,Result,Result,Result); } } MakeBlackWhiteImage(m_imageFile,0); delete []pUnchImage; pUnchImage = NULL ; delete []pUnchEdge ; pUnchEdge = NULL ; CFigureDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDoc->SetModifiedFlag(TRUE); Invalidate(); }
下载本文示例代码 基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理基于GDI 的数字图像处理 给主人留下些什么吧!~~
|