📄 chap06.htm
字号:
style='font-family:宋体;"Times New Roman"'>,</span><span lang=EN-US>B<sub>a</sub>
</span><span
style='font-family:宋体;"Times New Roman"'>包含于</span><span lang=EN-US>X</span><span style='font-family:
宋体;"Times New Roman"'>,所以</span><span
lang=EN-US>X</span><span style='font-family:宋体;
"Times New Roman"'>被</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>腐蚀的结果就是那个阴影部分。阴影部分在</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>的范围之内,且比</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>小,就象</span><span lang=EN-US>X</span><span style='font-family:
宋体;"Times New Roman"'>被剥掉了一层似的,这就是为什么叫腐蚀的原因。</span></p>
<p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>值得注意的是,上面的</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>是对称的,即</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>的对称集</span><span lang=EN-US>B<sup>v</sup>=B</span><span
style='font-family:宋体;"Times New Roman"'>,所以</span><span lang=EN-US>X</span><span style='font-family:
宋体;"Times New Roman"'>被</span><span
lang=EN-US>B</span><span style='font-family:宋体;
"Times New Roman"'>腐蚀的结果和</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>被</span><span lang=EN-US> B<sup>v</sup></span><span
style='font-family:宋体;"Times New Roman"'>腐蚀的结果是一样的。如果</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>不是对称的,让我们看看图</span><span lang=EN-US>6.9</span><span
style='font-family:宋体;"Times New Roman"'>,就会发现</span><span lang=EN-US>X</span><span style='font-family:
宋体;"Times New Roman"'>被</span><span
lang=EN-US>B</span><span style='font-family:宋体;
"Times New Roman"'>腐蚀的结果和</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>被</span><span lang=EN-US> B<sup>v</sup></span><span
style='font-family:宋体;"Times New Roman"'>腐蚀的结果不同。</span></p>
<p align=center style='text-align:center;line-height:18.0pt'><span
lang=EN-US> <img width=399 height=283
src="chap06.files/image025.jpg" v:shapes="_x0000_i1041"> </span></p>
<p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>6.9 </b><b><span
style='font-family:宋体;"Times New Roman"'>结构元素非对称时,腐蚀的结果不同</span><span lang=EN-US></span></b></p>
<p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>图</span><span lang=EN-US>6.8</span><span style='font-family:
宋体;"Times New Roman"'>和图</span><span
lang=EN-US>6.9</span><span style='font-family:宋体;
"Times New Roman"'>都是示意图,让我们来看看实际上是怎样进行腐蚀运算的。</span></p>
<p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>在图</span><span lang=EN-US>6.10</span><span style='font-family:
宋体;"Times New Roman"'>中,左边是被处理的图象</span><span
lang=EN-US>X(</span><span style='font-family:宋体;
"Times New Roman"'>二值图象,我们针对的是黑点</span><span lang=EN-US>)</span><span
style='font-family:宋体;"Times New Roman"'>,中间是结构元素</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>,那个标有</span><span lang=EN-US>origin</span><span
style='font-family:宋体;"Times New Roman"'>的点是中心点,即当前处理元素的位置,我们在介绍模板操作时也有过类似的概念。腐蚀的方法是,拿</span><span
lang=EN-US>B</span><span style='font-family:宋体;
"Times New Roman"'>的中心点和</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>上的点一个一个地对比,如果</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>上的所有点都在</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>的范围内,则该点保留,否则将该点去掉;右边是腐蚀后的结果。可以看出,它仍在原来</span><span
lang=EN-US>X</span><span style='font-family:宋体;
"Times New Roman"'>的范围内,且比</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>包含的点要少,就象</span><span lang=EN-US>X</span><span
style='font-family:宋体;"Times New Roman"'>被腐蚀掉了一层。</span></p>
<p style='line-height:18.0pt'><span lang=EN-US> <img width=536 height=209
src="chap06.files/image027.jpg" v:shapes="_x0000_i1042"> </span></p>
<p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>6.10 </b><b><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>腐蚀运算</span></b></p>
<p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>图</span><span lang=EN-US>6.11</span><span style='font-family:
宋体;"Times New Roman"'>为原图,图</span><span
lang=EN-US>6.12</span><span style='font-family:宋体;
"Times New Roman"'>为腐蚀后的结果图,能够很明显地看出腐蚀的效果。</span></p>
<p align=center style='text-align:center;line-height:18.0pt'><span
lang=EN-US> <img width=320 height=94
src="chap06.files/image029.jpg" v:shapes="_x0000_i1043"> </span></p>
<p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>6.11 </b><b><span style='font-family:宋体;
"Times New Roman"'>原图</span><span
lang=EN-US></span></b></p>
<p align=center style='text-align:center;line-height:18.0pt'><span
lang=EN-US> <img width=319 height=95
src="chap06.files/image031.jpg" v:shapes="_x0000_i1044"> </span></p>
<p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>6.12 </b><b><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>腐蚀后的结果图</span><span
lang=EN-US></span></b></p>
<p style='line-height:18.0pt'><span
style='font-family:宋体;"Times New Roman"'>下面的这段程序,实现了上述的腐蚀运算,针对的都是黑色点。参数中有一个</span><span lang=EN-US>BOOL</span><span
style='font-family:宋体;"Times New Roman"'>变量,为真时,表示在水平方向进行腐蚀运算,即结构元素</span><span lang=EN-US>B</span><span
style='font-family:宋体;"Times New Roman"'>为</span><span lang=EN-US><sub> <img width=63 height=23
src="chap06.files/image033.gif" v:shapes="_x0000_i1045"> </sub> </span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>;否则在垂直方向上进行腐蚀运算,即结构元素</span><span
lang=EN-US>B</span><span style='font-family:宋体;
"Times New Roman"'>为</span><span lang=EN-US><sub> <img width=28 height=75
src="chap06.files/image035.gif" v:shapes="_x0000_i1046"> </sub> </span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>。</span></p>
<p style='line-height:18.0pt'><span lang=EN-US>BOOL Erosion(HWND hWnd,BOOL Hori)</span></p>
<p style='line-height:18.0pt'><span lang=EN-US>{</span></p>
<p style='line-height:18.0pt'><span> </span>DWORD
OffBits,BufSize;</p>
<p style='line-height:18.0pt'>LPBITMAPINFOHEADER lpImgData;</p>
<p style='line-height:18.0pt'><span> </span>LPSTR
lpPtr;</p>
<p style='line-height:18.0pt'><span> </span>HLOCAL
hTempImgData;</p>
<p style='line-height:18.0pt'><span> </span>LPBITMAPINFOHEADER
lpTempImgData;</p>
<p style='line-height:18.0pt'><span> </span>LPSTR
lpTempPtr;</p>
<p style='line-height:18.0pt'><span> </span>HDC
hDc;</p>
<p style='line-height:18.0pt'><span> </span>HFILE
hf;</p>
<p style='line-height:18.0pt'><span> </span>LONG
x,y;</p>
<p style='line-height:18.0pt'><span> </span>unsigned
char
num;</p>
<p style='line-height:18.0pt'><span> </span>int
i;</p>
<p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
"Times New Roman"'>为了处理方便,仍采用</span><span lang=EN-US>256</span><span
style='font-family:宋体;"Times New Roman"'>级灰度图,不过只用调色板中</span><span lang=EN-US>0</span><span
style='font-family:宋体;"Times New Roman"'>和</span><span lang=EN-US>255</span><span style='font-family:
宋体;"Times New Roman"'>两项</span></p>
<p style='line-height:18.0pt'>if( NumColors!=256){ </p>
<p style='line-height:18.0pt'><span> </span>
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!",</p>
<p style='line-height:
18.0pt'><span lang=EN-US>"Error Message",MB_OK|MB_ICONEXCLAMATION);</span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>return FALSE;</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>}</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>//BufSize</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>为缓冲区大小</span></p>
<p style='line-height:18.0pt'><span> </span>BufSize=OffBits+bi.biHeight*LineBytes;</p>
<p style='line-height:18.0pt'><span> </span>//<span
style='font-family:宋体;"Times New Roman"'>为新的缓冲区分配内存</span></p>
<p style='line-height:18.0pt'><span> </span>if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)</p>
<p style='line-height:18.0pt'><span
lang=EN-US>{</span></p>
<p style='line-height:18.0pt'><span> </span>
MessageBox(hWnd,"Error alloc memory!","Error Message",</p>
<p style='line-height:
18.0pt'><span lang=EN-US>MB_OK|MB_ICONEXCLAMATION);</span></p>
<p style='line-height:
18.0pt'><span lang=EN-US>return FALSE;</span></p>
<p style='line-height:18.0pt'><span> </span>}</p>
<p style='line-height:18.0pt'><span> </span> lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
</p>
<p style='line-height:18.0pt'><span> </span>lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);</p>
<p style='line-height:18.0pt'><span> </span>//<span
style='font-family:宋体;"Times New Roman"'>拷贝头信息和位图数据</span><span>
</span></p>
<p style='line-height:18.0pt'><span> </span>memcpy(lpTempImgData,lpImgData,BufSize);</p>
<p style='line-height:18.0pt'><span> </span>if(Hori)</p>
<p style='line-height:18.0pt'><span> </span>{
</p>
<p style='line-height:
18.0pt'><span lang=EN-US>//</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>在水平方向进行腐蚀运算</span></p>
<p style='line-height:18.0pt'><span>
</span>for(y=0;y<bi.biHeight;y++){</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -