编辑: 无理的喜欢 2019-08-01
第27 卷第2 期 地球科学与环境学报 Vol .

2 7 No .

2 2

0 0

5 年6月Journal of Earth Sciences and Environment Jun.

2 0

0 5 扫描图像编辑软件编程实现 刘磊1 , 宋庆国1 , 郭艳1 , 刘继生2 , 周辉3 (1. 长安大学 地球科学与国土资源学院 , 陕西 西安 710054;

2. 陕西省测绘局 地理信息中心 , 陕西 西安 710054;

3. 陕西省农业遥感信息中心 , 陕西 西安 710015) [ 摘要] 以扫描图像编辑程序为例, 用VC ++ 实现了对扫描地图图像的读取、存储、移动、缩放、增删改, 并且整合了矢量化图像的二值化基本功能. 提供了一种灵活、快速的地图图像编辑软件实例. [ 关键词] 位图;

文件管理;

图像编辑;

二值化 [ 中图分类号] P208 [ 文献标识码] A [ 文章编号] 1672- 6561(2005)02 - 0066-

03 [ 作者简介] 刘磊(1979 -), 男, 陕西西安人, 硕士研究生, 从事土地资源管理、GIS 图形图像处理研究. [ 收稿日期]

2004 -

09 -

24 图像编辑是图像信息处理与分析的重要内容 . 地图由扫描仪扫描后得到的地图图像必须经过编辑 和检验后,才能够有效地对它进行正确地处理与分 析,特别是当图像质量不太好以及由扫描仪扫描而 引起较大失真时,图像编辑为用户提供了一个改正 图像中错误的途径.用户通过图像编辑既可以修 改、 增加或删除图像中的某些内容,而且还可以交互 式地完成某些难以用算法描述的图像处理过程.因此,开发地图图像编辑软件 ,对于数字地图的生产及 地图模式识别的实现,都很有意义 [

1 ,

2 ,

4 ~ 7] . 随着计算机技术日益普及和不断完善 , 对扫描 地图的图像编辑应用环境和开发都有了更高的要 求.国际上有很多比较成熟的针对扫描地形图的 编辑软件 ,而目前的地理信息系统软件都提供了强 大完善的扫描地图的图像编辑功能 .具体包括美 国ES RI 的GeoM edia SmartSketch 模块;

中国地质 大学开发的 M apGIS ;

武汉测绘科技大学开发的 GeoStar 等等, 这些软件的特点是功能全且丰富. 在此基础上,用户也迫切需要一些小巧的整合矢量 化功能的地图图像编辑软件.这些软件只要有基 本功能就可以, 因为大部分用户不可能用到大型软 件的所有功能 .软件一定要小巧 , 就是说体积要 小,可以方便的存储到移动存储介质(U 盘, 移动硬 盘等)里;

再就是速度要快 , 启动速度 , 处理速度都 比大型软件有优势.笔者以这一思路为目标 ,开发 了一个小型地图图像编辑软件.

1 软件主要结构和功能 扫描图像编辑软件主要完成对扫描地图图像 图1扫描图像 编辑软件功能 Fig.

1 Function map of the scannod imase edit saftuare 的编辑功能.通过对扫描 图像的编辑 ,使得编辑后的 图像更适于其后的工作. 主要功能见图

1 . 扫描图像编辑软件文 件管理的主要功能是打开 、 显示图像文件和将编辑好 的图像文件存储 ;

图像编辑的主要功能有图像文件 的缩放漫游 ,图像内容的增删改操作 ;

实现扫描图 像二值化就是把灰度图像变成黑白两色的图像 .

2 软件功能实现 2.

1 文件管理 通过 DIB 读取扫描地图图像, 比一般 DDB 读 取方法灵活 、 方便 、 速度快 [ 3] . 2.

2 图像编辑 2. 2.

1 实现扫描图像漫游和无级放大功能 用鼠标实现地图图像的漫游和无级放大, 比传 统的键盘方式更自由 ,更方便[ 8] (图2,图 3). void CCh1 _ 1View : OnLButtonDow n (UINT nFlags , CPoint point) { 图2扫描图像移动前后对比 Fig.

2 Contrast map before and after move 图3扫描图像放大前后对比 Fig.

3 Contrast map before and after zoom / / TODO :Add your message handler code here and /or call default if( m_flag ==1| | m_flag ==2)/ /如果在进行图形放大或 移动 { if(PushNumb ==0)/ /如果第一次按下鼠标左键 { m_PointOrigin =point ;

/ /原点等于按中点 m_PointOld =point ;

/ /上一个点等于按中点 PushNumb ++;

/ /左键按下次数加一 } else if(PushNumb ==1) / /第二次按下鼠标左键 { if( m_flag ==1)/ /如果是放大操作 { / /坐标系左上 / /得到放大区域左上点和右下点像素坐标 int x1 =min( m_PointOrigin. x ,point. x);

int y1 =min(m_PointOrigin. y , point. y);

int x2 =max(m_PointOrigin. x , point. x);

int y2 =max(m_PointOrigin. y ,point. y);

m_xstart =(float)(m_xstart +x1 *m_zoom);

/ /放大后 起始点坐标 m_ystart =(float)( m_ystart +y1 *m_zoom);

float bl1 =(float) m_wScreen /(float)(x2 - x1);

/ /横向 放大比例 float bl2 =(float)m _hScreen /(float)(y2 - y1);

/ /纵向 放大比例 if(bl2

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题