⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap07.htm

📁 数字图像处理入门. 一位图像处理高手写的书. 从图像处理的最基础开始,然后慢慢以一些例子做说明,进入图像处理的更高阶段.学习图像处理不可多得的比较朴实的书
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    = GetDC(hWnd);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>rhp   
    = CreatePenIndirect(&amp;rlp);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SelectObject(hDc,rhp);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MoveToEx(hDc,MaxdLine.botx,MaxdLine.boty,NULL);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//<span
style='font-family:宋体;"Times New Roman"'>在两端点之间画一条红线用来标识</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LineTo(hDc,MaxdLine.topx,MaxdLine.topy);</p>
  <p style='line-height:18.0pt'><span>&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp; DeleteObject(rhp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
  </p>
  <p style='line-height:18.0pt'><span>&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp; ReleaseDC(hWnd,hDc);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//<span
style='font-family:宋体;"Times New Roman"'>释放内存及资源</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>GlobalUnlock(hImgData);</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>GlobalUnlock(hDistAlpha);</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>GlobalFree(hDistAlpha);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp; GlobalUnlock(hMyLine);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>GlobalFree(hMyLine);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return   
    TRUE;</p>
  <p style='line-height:18.0pt'><span lang=EN-US>}</span><span
lang=EN-US style='font-size:9.0pt;'></span></p>
  <p style='line-height:18.0pt'><span style='font-family:宋体;
&quot;Times New Roman&quot;'>如果</span><span
lang=EN-US><sub> <img width=13 height=19
src="chap07.files/image047.gif"  v:shapes="_x0000_i1055"> </sub> </span><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>是给定的,用上述方法,我们可以找到该方向上最长的直线。</span></p>
  <p style='line-height:18.0pt'><span style='font-family:宋体;
&quot;Times New Roman&quot;'>其实</span><span
lang=EN-US>Hough</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>变换能够查找任意的曲线,只要你给定它的方程。这里,我们就不详述了。</span></p>
  <h2> <span
lang=EN-US>7.3</span> <span lang=EN-US> </span><a name="_Toc486331900"></a><a  
name="_Toc486332900"></a><a name="_Toc486339009"></a><a name="_Toc454810874"></a><a
name="_Toc454856648"><span><span>轮廓提取</span></span></a></h2>
  <p style='line-height:18.0pt'><span style='font-family:宋体;
&quot;Times New Roman&quot;'>轮廓提取的实例如图</span><span
lang=EN-US>7.9</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>、图</span><span lang=EN-US>7.10</span><span
style='font-family:宋体;"Times New Roman"'>所示。</span></p>
  <table border=0 cellspacing=0 cellpadding=0>
    <tr> 
      <td width=276 valign=top class="Normal"> 
        <p align=center style='text-align:center;line-height:18.0pt'><b><span
  lang=EN-US> <img width=224 height=148
  src="chap07.files/image049.gif"  v:shapes="_x0000_i1056"> </span></b></p>
        <p align=center style='text-align:center;line-height:18.0pt'><b><span
  style='font-family:宋体;"Times New Roman"'>图</span>7.9&nbsp;&nbsp;&nbsp;&nbsp;   
          </b><b><span style='font-family:
  宋体;&quot;Times New Roman&quot;'>原图</span><span
  lang=EN-US></span></b></p>
      </td>
      <td width=276 valign=top class="Normal"> 
        <p class=a style='line-height:18.0pt'><span lang=EN-US> <img width=224 height=148
  src="chap07.files/image051.gif"  v:shapes="_x0000_i1057"> </span></p>
        <p align=center style='text-align:center;line-height:18.0pt'><b><span
  style='font-family:宋体;"Times New Roman"'>图</span>7.10&nbsp;&nbsp; </b><b><span style='font-family:宋体;"Times New Roman";"Times New Roman"'>轮廓提取</span><span  
  lang=EN-US></span></b></p>
      </td>
    </tr>
  </table>
  <p style='line-height:18.0pt'><span style='font-family:宋体;
&quot;Times New Roman&quot;'>轮廓提取的算法非常简单,就是掏空内部点:如果原图中有一点为黑,且它的</span><span
lang=EN-US>8</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>个相邻点都是黑色时</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>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:
宋体;&quot;Times New Roman&quot;'>两种颜色。源程序如下:</span></p>
  <p style='line-height:18.0pt'><span lang=EN-US>BOOL Outline(HWND hWnd)</span></p>  
  <p style='line-height:18.0pt'><span lang=EN-US>{</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    OffBits,BufSize;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp; LPBITMAPINFOHEADER&nbsp;&nbsp;&nbsp;   
    lpImgData;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LPSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp; lpPtr;</p>  
  <p style='line-height:18.0pt'>HLOCAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    hTempImgData;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LPBITMAPINFOHEADER&nbsp;&nbsp;&nbsp;   
    lpTempImgData;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LPSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp; lpTempPtr;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>HDC&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    hDc;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>HFILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hf;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LONG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp; x,y;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; num;</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    nw,n,ne,w,e,sw,s,se;</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>我们处理的实际上是</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:
宋体;&quot;Times New Roman&quot;'>两种颜色。</span></p>
  <p style='line-height:18.0pt'><span
lang=EN-US>if( NumColors!=256){ </span></p>  
  <p style='line-height:
18.0pt'><span lang=EN-US>MessageBox(hWnd,&quot;Must be a mono bitmap with grayscale 
    palette!&quot;,</span></p>
  <p style='line-height:
18.0pt'><span lang=EN-US>&quot;Error Message&quot;,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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BufSize=OffBits+bi.biHeight*LineBytes;</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//<span
style='font-family:宋体;"Times New Roman"'>为新图缓冲区分配内存</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>{</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
    MessageBox(hWnd,&quot;Error alloc memory!&quot;,&quot;Error Message&quot;,MB_OK|</p>  
  <p style='line-height:
18.0pt'><span lang=EN-US>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>&nbsp;&nbsp;&nbsp; </span>}</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp; </span>&nbsp; lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);&nbsp;&nbsp;&nbsp;   
  </p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);</p>
  <p style='line-height:18.0pt'><span
lang=EN-US>//</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>拷贝头信息和位图数据</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memcpy(lpTempImgData,lpImgData,BufSize);</p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for   
    (y=1;y&lt;bi.biHeight-1;y++){ //<span style='font-family:宋体;"Times New Roman";"Times New Roman"'>注意</span><span  
lang=EN-US>y</span><span style='font-family:宋体;
&quot;Times New Roman&quot;'>的范围是从</span><span lang=EN-US>1</span><span
style='font-family:宋体;"Times New Roman"'>到高度</span><span lang=EN-US>-2</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>//lpPtr<span
style='font-family:宋体;"Times New Roman"'>指向原图数据,</span><span lang=EN-US>lpTempPtr</span><span
style='font-family:宋体;"Times New Roman"'>指向新图数据</span></p>
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </span>for (x=1;x&lt;bi.biWidth-1;x++){</p>  
  <p style='line-height:18.0pt'><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -