正在加载图片...
图77原图 图78 Hough变换的结果 可以看出,找到的确实是最长的直线。方法是,开一个二维数组做为计数器,第一维是角度, 第二维是距离。先计算可能出现的最大距离为√th2+aght2,用来确定数组第二维 的大小。对于每一个黑色点,角度的变化范围从0到178(为了减少存储空间和计算时间, 角度每次增加2而不是1),按方程(71)求出对应的距离s来,相应的数组元素s加1。 同时开一个数组Line,计算每条直线的上下两个端点。所有的象素都算完后,找到数组元 素中最大的,就是最长的那条直线。直线的端点可以在Line中找到。要注意的是,我们处 理的虽然是二值图,但实际上是256级灰度图,不过只用到了0和255两种颜色。 BOOL Hough(HWND hWnd ∥定义一个自己的直线结构 typedef structi nt topx;/最高点的x坐标 nt topy,∥最高点的y坐标 nt botx,∥最低点的ⅹ坐标 nt boty,∥最低点的y坐标 I MYLINE DWORD OffBits BufS ize LPBITMAPINFOHEADER lplmg Data LPSTR HDC LONO HGLOBAL hDist Alpha, h MyLine IpDistalpha'图 7.7 原图 图 7.8 Hough 变换的结果 可以看出,找到的确实是最长的直线。方法是,开一个二维数组做为计数器,第一维是角度, 第二维是距离。先计算可能出现的最大距离为 ,用来确定数组第二维 的大小。对于每一个黑色点,角度的变化范围从 0 0 到 1780 (为了减少存储空间和计算时间, 角度每次增加 2 0 而不是 1 0 ),按方程(7.1)求出对应的距离 s 来,相应的数组元素[s][ ]加 1。 同时开一个数组 Line,计算每条直线的上下两个端点。所有的象素都算完后,找到数组元 素中最大的,就是最长的那条直线。直线的端点可以在 Line 中找到。要注意的是,我们处 理的虽然是二值图,但实际上是 256 级灰度图,不过只用到了 0 和 255 两种颜色。 BOOL Hough(HWND hWnd) { //定义一个自己的直线结构 typedef struct{ int topx; //最高点的 x 坐标 int topy; //最高点的 y 坐标 int botx; //最低点的 x 坐标 int boty; //最低点的 y 坐标 }MYLINE; DWORD OffBits,BufSize; LPBITMAPINFOHEADER lpImgData; LPSTR lpPtr; HDC hDc; LONG x,y; long i,maxd; int k; int Dist,Alpha; HGLOBAL hDistAlpha,hMyLine; Int *lpDistAlpha;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有