工作用到的主要图象算法

原创 2004年07月14日 11:44:00

Hough变换

BOOL Hough(HWND hWnd)

 //定义直线结构
 typedef struct{
  int topx;
  int topy;
  int botx;
  int boty;
 }MYLINE;
 //内存
 DWORD              BufSize;
 //文件信息头指针
 LPBITMAPINFOHEADER lpImgData;
 //数据区指针
 LPSTR              lpPtr;
 HDC                hDc;
 LONG               x,y;
 long               i,maxd;
 int                k;
 int                Dist,Alpha;
 //定义了一个全局句柄
 HGLOBAL            hDistAlpha,hMyLine;
 int        *lpDistAlpha;
 MYLINE             *lpMyLine,*TempLine,MaxdLine;
 //定义一个逻辑画笔
 static LOGPEN      rlp={PS_SOLID,1,1,RGB(255,0,0)};
 
 //画笔
 HPEN               rhp;
 //判断是否为256色位图
 if( NumColors!=256){
  MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!","Error Message",MB_OK|MB_ICONEXCLAMATION);
  return FALSE;
 }
 //计算对角线长度
 Dist=(int)(sqrt( (double)bi.biWidth*bi.biWidth+(double)bi.biHeight*bi.biHeight)+0.5);
 Alpha=180 /2 ;
 //分配内存用来处理数据
 if((hDistAlpha=GlobalAlloc(GHND,(DWORD)Dist* Alpha * sizeof(int)))==NULL){
  MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|MB_ICONEXCLAMATION);
  return FALSE;
 }
 //分配内存来存放直线数据
 if((hMyLine=GlobalAlloc(GHND,(DWORD)Dist*Alpha*sizeof(MYLINE)))==NULL){
  GlobalFree(hDistAlpha);
  return  FALSE;
 }
 //得到文件头到数据区的偏移
 BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);
 //锁定内存
 lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
 lpDistAlpha=(int *)GlobalLock(hDistAlpha);
 lpMyLine=(MYLINE *)GlobalLock(hMyLine);
 //初始化直线数组
 for (i=0;i<(long)Dist*Alpha;i++){
  TempLine=(MYLINE*)(lpMyLine+i);
  (*TempLine).boty=32767;
 }
 //扫描整个源图像
 for (y=0;y<bi.biHeight;y++){
  lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
  for (x=0;x<bi.biWidth;x++)
   //黑色点
   if(*(lpPtr++)==0)
    for (k=0;k<180;k+=2){
     
     //在各个方向上加上这个点出现的概率(次数)
     i=(long)fabs((x*cos(k*PI/180.0)+y*sin(k*PI/180.0)));
     *(lpDistAlpha+i*Alpha+k/2)=*(lpDistAlpha+i*Alpha+k/2)+1;
     TempLine=(MYLINE*)(lpMyLine+i*Alpha+k/2);
     //修改直线结构调整y值
     //当前的y值大于结构中已有的值
     if(y> (*TempLine).topy){
      (*TempLine).topx=x;
      (*TempLine).topy=y;
     }
     //小于
     if(y< (*TempLine).boty){
      (*TempLine).botx=x;
      (*TempLine).boty=y;
     }
    }
 }
 
 maxd=0;
 //寻找概率最大的那条直线
 for (i=0;i<(long)Dist*Alpha;i++){
  TempLine=(MYLINE*)(lpMyLine+i);
  k=*(lpDistAlpha+i);
  if( k > maxd){
   maxd=k;
   //更新概率最大直线的两个端点位置坐标
   MaxdLine.topx=(*TempLine).topx;
   MaxdLine.topy=(*TempLine).topy;
   MaxdLine.botx=(*TempLine).botx;
   MaxdLine.boty=(*TempLine).boty;
  }
 }
 //得到DC
 hDc = GetDC(hWnd);
 rhp = CreatePenIndirect(&rlp);
 SelectObject(hDc,rhp);
 //移动到起始点
 MoveToEx(hDc,MaxdLine.botx,MaxdLine.boty,NULL);
 //画直线
 LineTo(hDc,MaxdLine.topx,MaxdLine.topy);
 DeleteObject(rhp);                      
 //释放资源
 ReleaseDC(hWnd,hDc);
 GlobalUnlock(hImgData);
 GlobalUnlock(hDistAlpha);
 GlobalFree(hDistAlpha);
 GlobalUnlock(hMyLine);
 GlobalFree(hMyLine);
 return TRUE;
}

 

LSA算法简单理解

文本挖掘的两个方面应用: (1)分类: a.将词汇表中的字词按意思归类(比如将各种体育运动的名称都归成一类) b.将文本按主题归类(比如将所有介绍足球的新闻归到体育类) (2)检索:用户提出提问式(通...
  • callejon
  • callejon
  • 2015年11月13日 02:25
  • 1812

年度工作总结模板

一、 考核期内主要业绩,工作创新、工作质量及成效:  1. 2011.5.10 - 2011.7 :联通116114门户网站开发  完成116114网站首页登录及注册、公告模块、红段子短信发送、地...
  • miketom155
  • miketom155
  • 2015年12月14日 09:13
  • 320

BI相关的内容---BI是什么,主要工作的内容有哪些?

BI是什么,主要工作的内容有哪些?  一、 1.数据移动 从这里抽取数据移动到那里,  2.数据分析统计 join  count  sum group by  之类的  3.数据报表:报表显示统计分析...
  • leiyanglove
  • leiyanglove
  • 2015年07月29日 09:31
  • 1667

Android事件处理之处理键盘事件

1.在Android开发中,首先和用户交互的是界面,接着就是事件处理,对于如今的图形界面应用程序,都是通过事件来实现人机交互的。事件就是用户对图形界面的操作,在Android手机和平板电脑上,主要包括...
  • u012561176
  • u012561176
  • 2015年02月18日 23:18
  • 706

编译器工作流程详解

编程语言对人或机器来说是用来描述计算任务的符号和规则。能够在机器上运行的所有软件都是用某种编程语言编写的程序。但是在程序运行前,必须要将其转化为机器能够执行的格式,编译器的功能就是这里的“转化”。 ...
  • u012491514
  • u012491514
  • 2014年04月27日 15:53
  • 960

DBA 职责及日常工作职责

原帖:http://www.itpub.net/thread-1167371-1-1.html   职责   1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境.   2.熟悉...
  • Wentasy
  • Wentasy
  • 2013年05月14日 09:11
  • 4606

Hive及其工作机制简介

Hive是一个基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一个表。并提供类SQL查询功能。数据仓库数据库是用来支撑在线联机业务的。比如页面上的数据的展示,保存客户操作产生的数据。这...
  • mrbcy
  • mrbcy
  • 2017年03月22日 22:34
  • 480

代码示例:一些简单技巧优化JavaScript编译器工作详解,让你写出高性能运行的更快JavaScript代码

告诉你一些简单的技巧来优化JavaScript编译器工作,从而让你的JavaScript代码运行的更快。尤其是在你游戏中发现帧率下降或是当垃圾回收器有大量的工作要完成的时候。 单一同态: 当你定义了一...
  • littlesmallless
  • littlesmallless
  • 2017年03月01日 22:20
  • 132

android手机通讯录数据库重要表介绍

一、raw_contacts表 该表用于保存手机通讯录中每个联系人的id,每添加一个联系人,就会出现一个id。该表只显示联系人的id号,并且每个联系人只有一个id。 二、data表 该表用于存放...
  • xyz_1991
  • xyz_1991
  • 2016年05月25日 21:48
  • 721

浏览器是如何工作的?(工作原理)

[架构设计]浏览器是如何工作的?(工作原理) 浏览器是如何工作的?(工作原理) 简介 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到...
  • u011627980
  • u011627980
  • 2016年07月13日 15:42
  • 934
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:工作用到的主要图象算法
举报原因:
原因补充:

(最多只允许输入30个字)