王三强 叶张帆 陈俊
近几年来,随着人类文明社会的发展和人民生活水平的提高,越来越多的人渴望了解探知宇宙的奥秘。目前进行科普天文观测一般过程为:查天文历书、星图等确定星体位置;寻找合适观测地点(为避开城市灯光及污染等因素);不断调整望远镜,寻找欲观测天体;定位天体后架设摄影器材进行拍摄。整个观测过程中存在诸多不便,如天体在天空中不断运动,每次观测之前必须查阅相关资料确定天体位置,然而星历表厚重而不直观,简易星图由于天体运动的因素必须在指定时间进行观测;望远镜手工调整非常繁琐;拍摄不便。
为了解决上述问题而开发本系统。它的主要特点如下:通过计算,在屏幕上显示出当时当地星图,观测者无需携带天文资料,在屏幕上将观测内容实时显示出来,使观测者无须忍受长时间单眼观测的视觉疲劳,同时提高了观测效果;可对观测图像进行实时处理;可非常方便地拍摄、保存观测结果;可对结果进行一些图像处理,增强可辨性,系统自动记录观测日志,方便整理观测资料。
2019-7-23 10:37:44
4 视频数据采集及显示
图像数据的显示可以通过直接写屏来实现。Linux工作在保护模式下,用户态进程是无法直接使用显卡:BIOS里提供的中断调用来实现直接写屏,故Linux抽象出FrameBuffer。这个设备来供用户态进程实现直接写屏。 FrameBtlffer主要是根据VESA标准实现的,所以只能实现最简单的功能。
直接写屏的过程:
(1)打开一个FrameBuffer设备;
(2)通过调用mmap()把显卡的物理内存空间映射到用户空间;
(3)直接写内存。
由于直接写屏是直接对显存进行修改,同QT对程序界面的刷新并不协调,因此有时会出现显示上的瑕疵,为此使用另一种方法显示图像数据,即利用QT库中的QImage类来实现。
以上论述了如何进行采集及显示,但在实际的系统中存在多个任务,各个模块之间需要相互配合,如果简单地采用上述方法,由于视频采集的速度较慢,将会造成阻塞,影响系统性能,因此使用线程技术。
在视频设备初始化后开启一个采集线程,此线程不断采集新的视频数据,采集完一帧数据会改写状态变量;显示部分采用定时显示,每隔一段时间判断状态变量是否为“已采集完毕”状态,如果是则进行显示。由于需要耗时等待的采集过程在线程中运行,通过Linux系统的自动调度,系统运行十分流畅。
4 视频数据采集及显示
图像数据的显示可以通过直接写屏来实现。Linux工作在保护模式下,用户态进程是无法直接使用显卡:BIOS里提供的中断调用来实现直接写屏,故Linux抽象出FrameBuffer。这个设备来供用户态进程实现直接写屏。 FrameBtlffer主要是根据VESA标准实现的,所以只能实现最简单的功能。
直接写屏的过程:
(1)打开一个FrameBuffer设备;
(2)通过调用mmap()把显卡的物理内存空间映射到用户空间;
(3)直接写内存。
由于直接写屏是直接对显存进行修改,同QT对程序界面的刷新并不协调,因此有时会出现显示上的瑕疵,为此使用另一种方法显示图像数据,即利用QT库中的QImage类来实现。
以上论述了如何进行采集及显示,但在实际的系统中存在多个任务,各个模块之间需要相互配合,如果简单地采用上述方法,由于视频采集的速度较慢,将会造成阻塞,影响系统性能,因此使用线程技术。
在视频设备初始化后开启一个采集线程,此线程不断采集新的视频数据,采集完一帧数据会改写状态变量;显示部分采用定时显示,每隔一段时间判断状态变量是否为“已采集完毕”状态,如果是则进行显示。由于需要耗时等待的采集过程在线程中运行,通过Linux系统的自动调度,系统运行十分流畅。
举报