1、 图像处理实验部分 打开图像 1. 创建MFC Application工程: 文件名称:MyImage 2. 添加cdib.h和cdib.cpp到工程项目中(也可以在工程项目中创建这两个文件,需要编写程序) 3. 在MyImageDoc.h文件中增加如下语句 public: CDib *m_pDib; (此类中增加成员变量表示Cdib对象的指针) 4. 在MyImageDoc.cpp文件中的构造函数中添加: m_pDib = new CDib; 在析构函数中添加 delete m_pDib; 5. 在MyImageDoc.h文件中添加#include "cdib.h
2、" 6. 在Doc.cpp中CMyImageDoc::Serialize(CArchive& ar)函数中添加: m_pDib->Serialize(ar); 用CDib的串行化来实现CDisplayBmpImDoc文档的串行化。 7. 在CMyImageView.h中添加变量声明 18 public: int lWidth; int lHeight; long int lLineBytes; CPoint StartPoint; CPoint EndPoint; bool m_bTwoValue; 8. CMyImageView.cpp
3、文件中的OnDraw()函数中添加代码 void CMyImageView::OnDraw(CDC* pDC) { … CSize size; int lHeight,lWidth; if (pDoc->m_pDib->m_lpBMIH!=NULL) { lWidth=pDoc->m_pDib->m_lpBMIH->biWidth; lHeight=pDoc->m_pDib->m_lpBMIH->biHeight; size.cx=lWidth; size.cy=lHeight; pDoc->m_pDib->Draw(pDC,CPoin
4、t(0,0),size); } } 运行,即可打开一幅BMP格式的图像 一、灰度化与直方图 图1 初始图片 图2 灰度化图片(作为原图片使用) 图3 灰度化图片直方图 灰度化图片直方图生成流程图 二、图像滤波 (一)均值滤波(3*3模板) 基本思想: 基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度值g(x,y)。 步骤如下:
5、 1.在资源菜单menu中Hist Modify中添加菜单按钮Mean Filter 2.ID名称可以随意修改,也可以默认。 3.中CMyImage点击右键,选择属性 在下拉菜单中找到ID_IMGSMOOTHMEANFILTER,添加代码 4.在MyImageView.cpp中出现 void CMyImageView::OnImgsmoothMeanfilter()函数 5.在其中添加代码 void CMyImageView::OnImgsmoothMeanfilter() { CMyImageDoc* pDoc = GetDocument(); int lHeight
6、pDoc->m_pDib->m_lpBMIH->biHeight; int lWidth=pDoc->m_pDib->m_lpBMIH->biWidth; int lLineBytes=(lWidth+3)/4*4; unsigned char *lpSrc; unsigned char *lpDst; unsigned char *lpNewDib; lpNewDib=new unsigned char[lLineBytes*lHeight]; memcpy(lpNewDib,pDoc->m_pDib->m_lpImage,lLineBytes*lHeight)
7、
for (int i = 0; i 8、 *(lpSrc+lLineBytes)+*(lpSrc-lLineBytes)+
*(lpSrc+lLineBytes+1)+*(lpSrc-lLineBytes+1)+
*(lpSrc+lLineBytes-1)+*(lpSrc-lLineBytes-1))/9;
}
lpSrc++;lpDst++;
}
}
memcpy(pDoc->m_pDib->m_lpImage,lpNewDib,lLineBytes*lHeight);
Invalidate(true);
MessageBox(L"均值滤波");
}
9、
(二)中值滤波(3*3模板)
基本思想:
中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升的二维数据序列,并取出序列中位于中间位置的灰度作为中心像素的灰度。
步骤如下:
1.在资源菜单menu中Hist Modify中添加菜单按钮Median Filter
2.中CMyImage点击右键,选择属性
在下拉菜单中找到ID_IMGSMOOTHMEDIANFILTER,添加代码
3.在MyImageView.cpp中出 10、现
void CMyImageView::OnImgsmoothMedianfilter()函数
4.在其中添加代码
void CMyImageView::OnImgsmoothMedianfilter()
{
CMyImageDoc* pDoc = GetDocument();
int lHeight=pDoc->m_pDib->m_lpBMIH->biHeight;
int lWidth=pDoc->m_pDib->m_lpBMIH->biWidth;
int lLineBytes=(lWidth+3)/4*4;
unsigned char *lpSrc;
11、unsigned char *lpDst;
unsigned char *lpNewDib;
lpNewDib=new unsigned char[lLineBytes*lHeight]; memcpy(lpNewDib,pDoc->m_pDib->m_lpImage,lLineBytes*lHeight);
for (int i = 0; i 12、 (lHeight-1-i) ;
for (int j =0; j 13、);a[7]=*(lpSrc+lLineBytes-1);a[8]=*(lpSrc-lLineBytes-1);
for(n=0;n<9;n++)
{
for(m=n+1;m<9;m++)
if(a[n]m_pDib->m_lpImage,lpNe 14、wDib,lLineBytes*lHeight);
Invalidate(true);
MessageBox(L"中值滤波");
}
(三)均值滤波(5*5模板)
1.在资源菜单menu中Hist Modify中添加菜单按钮Median Filter5
2.中CMyImage点击右键,选择属性
在下拉菜单中找到ID_IMGSMOOTHMEDIANFILTER5,添加代码
3.在MyImageView.cpp中出现
void CMyImageView::OnImgsmoothMedianfilter5()函数
4.在其中添加代码
void CMyImageView::O 15、nImgsmoothMeanfilter5()
{
…
for (int i = 0; i 16、lpSrc)+*(lpSrc+1)+*(lpSrc-1)+
*(lpSrc+lLineBytes)+*(lpSrc-lLineBytes)+
*(lpSrc+lLineBytes+1)+*(lpSrc-lLineBytes+1)+
*(lpSrc+lLineBytes-1)+*(lpSrc-lLineBytes-1)+
*(lpSrc-2*lLineBytes)+ *(lpSrc+2*lLineBytes)+ *(lpSrc-2*lLineBytes-1)+
*(lpSrc-2*lLineBytes-2)+ *(lpSrc 17、2*lLineBytes+1)+ *(lpSrc-2*lLineBytes+2)+
*(lpSrc+2*lLineBytes-1)+ *(lpSrc+2*lLineBytes-2)+ *(lpSrc+2*lLineBytes+1)+
*(lpSrc+2*lLineBytes+2)+ *(lpSrc+2)+*(lpSrc-2)+
*(lpSrc+lLineBytes+2)+*(lpSrc-lLineBytes+2)+
*(lpSrc+lLineBytes-2)+*(lpSrc-lLineBytes-2))/15;
}
l 18、pSrc++;lpDst++;
}
}
memcpy(pDoc->m_pDib->m_lpImage,lpNewDib,lLineBytes*lHeight);
Invalidate(true);
MessageBox(L"均值滤波5*5");
}
(四)中值滤波(5*5模板)
1.在资源菜单menu中Hist Modify中添加菜单按钮Median Filter5
2.中CMyImage点击右键,选择属性
在下拉菜单中找到ID_IMGSMOOTHMEDIANFILTER5,添加代码
3.在MyImageView.cpp中出现
void CMyImage 19、View::OnImgsmoothMedianfilter()函数
4.在其中添加代码
void CMyImageView::OnImgsmoothMedianfilter5()
{
…
for (int i = 0; i
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818