开发工具

VS2008+Qt4.8.0+GDAL1.9

 要点

接口要独立,软件平台与算法模块独立,平台中各接口设计灵活,修改时容易。

设计软件时一步步来,每个功能逐一实现,某个功能当比较独立时可以做一个测试程序,测试无误后将功能添加到工程中。此外,在软件设计过程中,自身会想到一些功能,为了测试功能方案的可行性,可以单独做一个测试示例,测试方案是否可行,这样主动地学习可以学到很多新的知识。同时也可以增强自己解决问题的能力。

 软件的主线: 

1.打开图像后,将影像及其含有的波段数(微波图像是极化方式)以树形结构显示在界面上,采用QTreeWidget;

2.双击某个波段或极化方式后,显示出缩略图,这里记录好波段,GDALRasterBand类指针对象。缩略图还需保存缩小的倍数,这在后面ROI区域选择时会用到。需要保存的值设为成员变量。

3.选择缩略图的某一块区域(ROI区域),读出该区域原始图像数据,作为金字塔第一层,然后依次向上再构建四层,总共五层,将第五层图像显示在视图中,视图采用QGraphicsView框架。这里有一个重点是如何读出ROI区域代表的源图像数据,需要根据鼠标按下和鼠标释放时的坐标求出,核心就是坐标转换。构建出的金字塔每一层的图像(QImage)和数据(unsigned char*)都保存在容器中,这里容器设为成员变量。

4.在视图缩放时就是调用不同的金字塔层。

5.实现视图中图像拖拽的关键就在于重写QGraphicsView类的鼠标移动事件,在主程序中设置一个定时器,定时跟踪鼠标的变化,然后根据移动的位移设置滑动条。如此就实现了拖拽。

6.做算法处理时,要注意是对ROI区域源图像数据的处理,而非保存在金字塔中的图像数据,因为源图像数据不一定是字节类型,而金字塔中的数据类型均为字节类型,做显示用嘛。处理完后,以处理完后的数据为金字塔第一层,再进行构建,保存。

 函数接口

这里最关键的就是数据的接口,因为软件大部分都是从涉及图像数据的输入输出,还有数据的保存。

1.设计采样读源图像的接口,类似于RasterIO,这里面原理就是利用RasterIO这个接口。

template<class T>
void getImgData(GDALRasterBand* poBand,T* data,int x_off,int y_off,int x_size,int y_size,int width,int height);

2.创建高斯金字塔的接口

void createGaussImages(unsigned char *data,int width,int height);  

因为使用Qt显示图形是采用的是RGB888的格式,因此data不是第一层图像数据,但第一层图像数据通过data获得,第一层的宽为width,高为height

3.显示视图的接口

显示的视图是从金字塔中调出来的

void showImage(QImage *image); 

特别注意

图像操作中均是指针的操作,因此要特别留意指针的使用。在指针重新只想一块地址区时都要先进性判断,如下

if (data)
{
delete []data;
data=NULL;
}
data=new unsigned char[width*height];

此外,对于保存金字塔图像和数据的容器,在每次金字塔构建前都要进行判断,不为空则释放掉容器中所有的数据和QImage*指向的内存空间,再把容器清空,然后用容器装新的金字塔数据和图像。

基于Qt的遥感图像处理软件设计总结的更多相关文章

  1. 基于Qt的P2P局域网聊天及文件传送软件设计

    基于Qt的P2P局域网聊天及文件传送软件设计 zouxy09@qq.com http://blog.csdn.net/zouxy09         这是我的<通信网络>的课程设计作业,之 ...

  2. 【Qt编程】基于Qt的词典开发系列<六>--界面美化设计

    本文讲一讲界面设计,作品要面向用户,界面设计的好坏直接影响到用户的体验.现在的窗口设计基本都是扁平化的,你可以从window XP与window 8的窗口可以明显感觉出来.当然除了窗口本身的效果,窗口 ...

  3. 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计

    这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...

  4. 【Qt编程】基于Qt的词典开发系列<二>--本地词典的设计

    我设计的词典不仅可以实现在线查单词,而且一个重大特色就是具有丰富的本地词典库:我默认加入了八个类型的词典,如下所示: 由于是本人是通信专业,因此加入了华为通信词典.电子工程词典,又由于我喜爱编程,也加 ...

  5. 【Qt编程】基于Qt的词典开发系列<一>--词典框架设计及成品展示

    去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...

  6. windows平台下基于QT和OpenCV搭建图像处理平台

        在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...

  7. 平台+插件软件设计思想及基于COM的原型实现

    引言:我们已经习惯于一个人独立进行软件开发,每个人都使用自己的风格进行程序设计,但随着工程项目变大或者是对时间要求比较紧时,就需要几个人,十几个人,甚至是上百个人协作进行软件开发与设计,这时一个比较棘 ...

  8. 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...

  9. 软件设计之基于Java的连连看小游戏(一)——开题及游戏首页的制作

    原本计划紧张忙碌的考试月在图书馆和实验室度过,结果突如其来为期两周的软件设计把课余时间几乎捆绑在了机房.软设没有太多知识上的要求,只要成品简洁美观.实用准确即可.考虑了很久决定要用Java swing ...

随机推荐

  1. checkbox和radio使用

    jQuery获取Radio选择的Value值: jQuery   C#   VB   C++   Java jQuery设置Radio的Value值: 语法解释: 1. $("input[n ...

  2. python基础语法(3)

    七.面向对象编程 python支持面向对象编程:类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例. 对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为域:对 ...

  3. linux中实现自动交互的3中方法

    本文参考了 http://os.51cto.com/art/200912/167898.htm 有些命令例如ftp需要交互,有三种方法可以实现. 方法一(重定向)简单直观,也经常有实际应用,但是在自动 ...

  4. 在指定控件位置弹出popup window

    先看效果图 黄色的就是弹出的popup window 首先自定义一个view用来显示,文件名为layout_my_view.xml <?xml version="1.0" e ...

  5. 注意在<s:if test="#session.user.power==0">中不能用 <s:if test=$sessionScope.user.power==0">

    获取封装在session的对象 用#session.对象名,可以获取对象 用#session.对象名.属性,可以获取属性. 注意在<s:iftest="#session.user.po ...

  6. spring常见异常

    1.ClassNotFoundException: org.springframework.dao.support.DaoSupport(解决:导入spring-tx) 2.NoClassDefFou ...

  7. AIX之ASM存储扩容

    ASM存储扩容操作其实很简单,无非就是向DiskGroup(简称DG)里添加物理磁盘,增加DG的存储空间.说来简单,其实操作过程中有很多小细节要注意,否则,带来的后果是灾难性的. ASM扩容操作步骤( ...

  8. 我们为什麽需要有经验的DBA

    我们为什麽需要有经验的DBA 自从我进来园子之后,发觉虽然我们分享了很多质量很好的文章给大家,但是大家不一定能够消化得了这些文章 理解这些文章还是需要有一定环境,有环境你解决了,但是可能还有别的捷径减 ...

  9. Magicodes.WeiChat——后台JS框架封装

    Magicodes.WeiChat同时也致力于提高后台开发效率,因此对在后台前端这块也做了一定的封装.我们先来说说主要的框架JS——mwc.js和mwc_elements.js.这两个JS文件位于Sc ...

  10. Dynamic CRM 2013学习笔记(二十七)无代码 复制/克隆方法

    前面介绍过二种复制/克隆方法:<Dynamic CRM 2013学习笔记(十四)复制/克隆记录> 和<Dynamic CRM 2013学习笔记(二十五)JS调用web service ...