📄 chap08.htm
字号:
<p style='line-height:18.0pt'><span> </span>_lclose(hf);</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> ReleaseDC(hWnd,hDc);</p>
<p style='line-height:18.0pt'><span> </span>LocalUnlock(hTempImgData);</p>
<p style='line-height:18.0pt'><span> </span>LocalFree(hTempImgData);</p>
<p style='line-height:18.0pt'><span> </span>GlobalUnlock(hImgData);</p>
<p style='line-height:18.0pt'><span> </span>return
TRUE;</p>
<p style='line-height:18.0pt'><span lang=EN-US>}</span></p>
<h2> <span
lang=EN-US>8.2</span> <span lang=EN-US> </span><a name="_Toc486331905"></a><a
name="_Toc486332905"></a><a name="_Toc486339014"></a><a name="_Toc454810879"></a><a
name="_Toc454856653"><span><span>差影法</span></span></a></h2>
<p style='line-height:18.0pt'><span style='font-family:宋体;
"Times New Roman"'>差影法的原理非常简单:将前后两幅图象相减,得到的差作为结果结果图象。图</span><span
lang=EN-US>8.6</span><span style='font-family:宋体;
"Times New Roman"'>、图</span><span lang=EN-US>8.7</span><span
style='font-family:宋体;"Times New Roman"'>、图</span><span lang=EN-US>8.8</span><span style='font-family:
宋体;"Times New Roman"'>能够说明差影法的原理。</span></p>
<table border=0 cellspacing=0 cellpadding=0>
<tr>
<td width=184 valign=top class="Normal">
<p style='line-height:18.0pt'><span lang=EN-US> <img width=184 height=148
src="chap08.files/image011.jpg" v:shapes="_x0000_i1030"> </span></p>
<p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>8.6
</b><b><span style='font-family:
宋体;"Times New Roman"'>前景</span><span
lang=EN-US>+</span></b><b><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>背景</span><span
lang=EN-US></span></b></p>
</td>
<td width=184 valign=top class="Normal">
<p style='line-height:18.0pt'><span lang=EN-US> <img width=186 height=150
src="chap08.files/image013.jpg" v:shapes="_x0000_i1031"> </span></p>
<p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span>8.7
</b><b><span style='font-family:
宋体;"Times New Roman"'>背景</span><span
lang=EN-US></span></b></p>
</td>
<td width=184 valign=top class="Normal">
<p style='line-height:18.0pt'><span lang=EN-US> <img width=186 height=150
src="chap08.files/image015.jpg" v:shapes="_x0000_i1032"> </span></p>
<p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>图</span><span lang=EN-US>8.8 </span></b><b><span
style='font-family:宋体;"Times New Roman"'>图</span><span lang=EN-US>8.6</span></b><b><span
style='font-family:宋体;"Times New Roman"'>、图</span><span lang=EN-US>8.7</span></b></p>
<p align=center style='text-align:center;line-height:18.0pt'><b><span
style='font-family:宋体;"Times New Roman"'>相减的结果</span></b></p>
</td>
</tr>
</table>
<p style='line-height:18.0pt'><span style='font-family:宋体;
"Times New Roman"'>图</span><span
lang=EN-US>8.6</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>)</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>)</span><span
style='font-family:宋体;"Times New Roman"'>。图</span><span lang=EN-US>8.7</span><span style='font-family:
宋体;"Times New Roman"'>是背景图。图</span><span
lang=EN-US>8.6</span><span style='font-family:宋体;
"Times New Roman"'>减图</span><span lang=EN-US>8.7</span><span
style='font-family:宋体;"Times New Roman"'>的结果如图</span><span lang=EN-US>8.8</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>)</span><span
style='font-family:宋体;"Times New Roman"'>。</span></p>
<p style='line-height:18.0pt'><span style='font-family:宋体;
"Times New Roman"'>差影法是非常有用的,比如说可以用在监控系统中。在银行金库内,摄像头每隔一小段时间,拍摄一幅图,与上一幅图做差影;如果差别超过了预先设置的阈值,说明有人,这时就应该拉响警报。</span></p>
<p style='line-height:18.0pt'><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>c:\test.bmp</span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>,第二幅图的文件名是</span><span
lang=EN-US>c:\backgnd.bmp</span><span style='font-family:宋体;"Times New Roman";"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'><span lang=EN-US>BOOL Subtraction(HWND hWnd)</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>HGLOBAL
hSecond;</p>
<p style='line-height:18.0pt'><span> </span>LPBITMAPINFOHEADER
lpSecondImgData;</p>
<p style='line-height:18.0pt'><span> </span>LPSTR
lpSecondPtr;</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>int
num,pos;</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'><span> </span>if(
NumColors!=256){</p>
<p style='line-height:
18.0pt'><span lang=EN-US>MessageBox(hWnd,"Must be a mono bitmap with grayscale
palette!",</span></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> </span> if((hf=_lopen("c:\\backgnd.bmp",OF_READ))==HFILE_ERROR){
</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>
MessageBox(hWnd,"File c:\\backgnd.bmp not found!","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
lang=EN-US>}</span></p>
<p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
"Times New Roman"'>到位图数据的偏移值</span></p>
<p style='line-height:18.0pt'><span> </span>OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);</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>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((hSecond=GlobalAlloc(GHND,BufSize))==NULL)</p>
<p style='line-height:18.0pt'><span> </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>
</span>_lclose(hf);</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -