发明内容
本发明提供的使用Qt库显示MRC格式的图片文件的方法和系统,要解决的技术问题是使用Qt库能够显示MRC格式的图片文件。
为解决上述技术问题,本发明提供了如下技术方案:
一种使用Qt库显示MRC格式的图片文件的方法,包括:
获取MRC格式的图片文件在数据模式为字符类型时的数据信息;
使用Qt库对所述数据信息进行处理,将得到的处理结果作为所述MRC格式的图片文件所携带的信息进行显示。
优选的,所述方法还具有如下特点:所述获取MRC格式的图片文件在数据模式为字符类型时的数据信息,包括:
如果MRC格式的图片文件的数据模式为字符类型,则读取该MRC格式的图片文件的全部图片数据,并将得到的全部图片数据保存至图片数组;否则,按照MRC格式的图片文件中图片的编号顺序,逐个读取图片,在将图片转换为字符类型的数据模式后,在从转换后的图片获取数据信息,保存至图片数组,循环直至所有图片被处理完毕。
优选的,所述方法还具有如下特点:所述将图片转换为字符类型的数据模式,包括:
对图片进行第一遍扫描,得到该图片上像素的平均值;
对所述图片进行第二遍扫描,根据所述像素的平均值,得到该图片上像素的标准差;
对所述图片进行第三遍扫描,从所述图片上像素值小于标准差至少两倍的像素中,选出最大像素值和最小像素值;
对所述图片进行第四遍扫描,根据最大像素值和最小像素值最小值,对所述图片上的像素值进行归一化处理,得到像素值介于区间为0~255的图片。
优选的,所述方法还具有如下特点:所述像素值小于标准差至少两倍的像素是指像素值小于标准差三倍的像素。
优选的,所述方法还具有如下特点:所述使用Qt库对所述数据信息进行处理,将得到的处理结果作为所述MRC格式的图片文件所携带的信息进行显示,包括:
当接收到更改显示内容的请求时,获取在显示当前图片之前所显示的图片;
根据当前图片以及该当前图片显示之前所显示的图片,确定所述MRC格式的图片文件的显示方向;
根据得到的显示方向,获取要显示的图片的数据信息,发起图片显示流程。
一种使用Qt库显示MRC格式的图片文件的系统,包括:
获取装置,用于获取MRC格式的图片文件在数据模式为字符类型时的数据信息;
显示装置,用于使用Qt库对所述数据信息进行处理,将得到的处理结果作为所述MRC格式的图片文件所携带的信息进行显示。
优选的,所述系统还具有如下特点:所述获取装置包括:
如果MRC格式的图片文件的数据模式为字符类型,则读取该MRC格式的图片文件的全部图片数据,并将得到的全部图片数据保存至图片数组;否则,按照MRC格式的图片文件中图片的编号顺序,逐个读取图片,在将图片转换为字符类型的数据模式后,在从转换后的图片获取数据信息,保存至图片数组,循环直至所有图片被处理完毕。
优选的,所述系统还具有如下特点:所述获取装置包括:
第一扫描模块,用于对图片进行第一遍扫描,得到该图片上像素的平均值;
第二扫描模块,用于对所述图片进行第二遍扫描,根据所述像素的平均值,得到该图片上像素的标准差;
第三扫描模块,用于对所述图片进行第三遍扫描,从所述图片上像素值小于标准差至少两倍的像素中,选出最大像素值和最小像素值;
第四扫描模块,用于对所述图片进行第四遍扫描,根据最大像素值和最小像素值最小值,对所述图片上的像素值进行归一化处理,得到像素值介于区间为0~255的图片。
优选的,所述系统还具有如下特点:第三扫描模块所使用的所述像素值小于标准差至少两倍的像素是指像素值小于标准差三倍的像素。
优选的,所述系统还具有如下特点:所述显示装置包括:
获取模块,用于当接收到更改显示内容的请求时,获取在显示当前图片之前所显示的图片;
确定模块,用于根据当前图片以及该当前图片显示之前所显示的图片,确定所述MRC格式的图片文件的显示方向;
显示模块,用于根据得到的显示方向,获取要显示的图片的数据信息,发起图片显示流程。
本发明提供的实施例,通过获取MRC格式的图片文件在数据模式为字符类型时的数据信息,由于得到的数据信息是Qt库支持的,使用Qt库搭建可视化部分,所以根据得到的数据信息可以使用Qt库显示该MRC格式的图片文件所携带的信息。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步的详细描述。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1为本发明提供的使用Qt库显示MRC格式的图片文件的方法实施例的流程示意图。图1所示方法包括:
步骤101、获取MRC格式的图片文件在数据模式为字符类型时的数据信息;
步骤102、使用Qt库对所述数据信息进行处理,将得到的处理结果作为所述MRC格式的图片文件所携带的信息进行显示。。
本发明提供的方法实施例,通过获取MRC格式的图片文件在数据模式为字符类型时的数据信息,由于得到的数据信息是Qt库支持的,所以根据得到的数据信息可以使得Qt库显示该MRC格式的图片文件。
下面对本发明提供的方法作进一步说明:
步骤S110,读取MRC格式的图片文件的文件头(以下称为MRC文件头),本实施例中MRC文件头为1024字节;MRC格式的图片文件除文件头之外的其余数据为PRC图片数据(以下称为图片数据);
步骤S120,根据MRC文件头获得MRC图片的长度(长度方向上的像素数量)、宽度(宽度方向上的像素数量)、图片数量和数据模式;
具体地,根据MRC文件头的前16个字节来确定MRC图片的长度、宽度、图片数量和数据模式;比如将MRC文件头存入一个以字节为单位的数组中,以每四个字节为一个单位,按照整型的数据类型解释该MRC文件头,即可获得MRC图片的长度、宽度、图片数量和数据模式;
其中,上述的数据模式是指MRC文件所存储的数据是以何种数据格式存放的(具体地,是以浮点型(float)存放还是以字符型(char)存放等),后续处理方式与此格式有关;
步骤S130,创建picParam结构体,其中该结构体的参数包含图片的基本信息,显示信息,如缩放倍数,显示第几张图片,对比度信息,翻转信息等;
具体来说,创建picParam结构体的实例,表示欲显示图片的参数;创建有三个元素的循环链表,每个元素含有一个图片变量,以及该图片相应的picParam;根据图片信息创建字符型数组(以下称图片数组),大小为图片长度、宽度、数量三者的乘积;初始化界面及其它参数;
步骤S140,创建新线程,读取并将图片数据转换为灰度图像,其方法为:
如果MRC格式的图片文件的数据模式为字符类型,则读取该MRC格式的图片文件的全部图片数据,并将得到的全部图片数据保存至图片数组;否则,按照MRC格式的图片文件中图片的编号顺序,逐个读取图片,在将图片转换为字符类型的数据模式后,在从转换后的图片获取数据信息,保存至图片数组,循环直至所有图片被处理完毕。
其中,所述将图片转换为字符类型的数据模式,包括:
对图片进行第一遍扫描,得到该图片上像素的平均值;
对所述图片进行第二遍扫描,根据所述像素的平均值,得到该图片上像素的标准差;
对所述图片进行第三遍扫描,从所述图片上像素值小于标准差至少两倍的像素中,选出最大像素值和最小像素值,其中此处的至少两倍是指三倍;
需要说明的是,上述四次扫描图片使用OpenMP加速;
其中,OpenMP是免费的单机并行开发库,可以通过简单修改代码,将串行程序转换为并行程序,加快程序运行速度;
步骤S150,显示第一张图片,从图片数组中读取第一张图片的内容,并加上图片格式的文件头,更新到循环链表的第一项的图片,更新显示模块的图片指针,刷新显示模块视图。
步骤S160,当通过人际交互界面更改欲显示的图片参数时,改变上述欲显示图片的参数,调用更新缓存模块;
步骤S170,更新缓存模块,首先对比欲显示的图片参数与循环链表中当前项的图片参数是否相同,如相同则刷新显示模块视图,创建两个线程,分别更新其余两个缓存为欲显示图片后第一张和后第二张,如不同则重复本步直到查询完整个链表,如链表中没有该图片,则读取该图片并更新图片指针,且创建两个线程分别更新其余显存;
具体来说:当接收到更改显示内容的请求时,获取在显示当前图片之前所显示的图片;根据当前图片以及该当前图片显示之前所显示的图片,确定所述MRC格式的图片文件的显示方向;根据得到的显示方向,获取要显示的图片的数据信息,发起图片显示流程。
图2为本发明提供的使用Qt库显示MRC格式的图片文件的系统的结构示意图。图2所示系统实施例包括:
获取装置201,用于获取MRC格式的图片文件在数据模式为字符类型时的数据信息;
显示装置202,用于使用Qt库对所述数据信息进行处理,将得到的处理结果作为所述MRC格式的图片文件所携带的信息进行显示。
其中,所述获取装置包括:
如果MRC格式的图片文件的数据模式为字符类型,则读取该MRC格式的图片文件的全部图片数据,并将得到的全部图片数据保存至图片数组;否则,按照MRC格式的图片文件中图片的编号顺序,逐个读取图片,在将图片转换为字符类型的数据模式后,在从转换后的图片获取数据信息,保存至图片数组,循环直至所有图片被处理完毕。
优选的,所述获取装置包括:
第一扫描模块,用于对图片进行第一遍扫描,得到该图片上像素的平均值;
第二扫描模块,与所述第一扫描模块相连,用于对所述图片进行第二遍扫描,根据所述像素的平均值,得到该图片上像素的标准差;
第三扫描模块,与所述第二扫描模块相连,用于对所述图片进行第三遍扫描,从所述图片上像素值小于标准差至少两倍的像素中,选出最大像素值和最小像素值;
第四扫描模块,与所述第三扫描模块相连,用于对所述图片进行第四遍扫描,根据最大像素值和最小像素值最小值,对所述图片上的像素值进行归一化处理,得到像素值介于区间为0~255的图片。
其中,第三扫描模块所使用的所述像素值小于标准差至少两倍的像素是指像素值小于标准差三倍的像素。
图3为图2所示实施例中显示装置202的结构示意图。为了加速图像的显示速度,所述显示装置202包括:
获取模块301,用于当接收到更改显示内容的请求时,获取在显示当前图片之前所显示的图片;
确定模块302,与所述获取模块301相连,用于根据当前图片以及该当前图片显示之前所显示的图片,确定所述MRC格式的图片文件的显示方向;
显示模块303,与所述确定模块302相连,用于根据得到的显示方向,获取要显示的图片的数据信息,发起图片显示流程。
本发明提供的方法实施例,通过获取MRC格式的图片文件在数据模式为字符类型时的数据信息,由于得到的数据信息是Qt库支持的,所以根据得到的数据信息可以使得Qt库显示该MRC格式的图片文件
应用实例
本应用实例处理的是一个拥有512*512大小,13张浮点型(float)图片的MRC文件。
读取MRC图片数据,得到长512,宽512,图片数13,数据类型2,即浮点型。
根据上述信息初始化界面参数,其中,放大倍数为1,白色颜色值上限为255,黑色颜色值下限为0,查看的图片序号为(13+1)/2=7。创建图片整体数据数组(char型),大小为512*512*13。创建一个三元素的循环链表,每个元素是显示图片的缓冲区,换句话来说就是每个缓存区存储有一张图片的数据信息。
创建一个线程执行处理图片整体数组,以一张图片为单位,依次执行以下步骤:读取一张图片,第一遍扫描数组取得平均值;第二遍扫描数组,根据平均值计算标准差;第三遍扫描数组,取得像素数值在标准差2倍以内的数据中的最大值和最小值;第四遍扫描数组,根据最大值和最小值,使用线性归一化方法将数据归一化至0~255的区间内,并赋值到图片整体数组。以上步骤重复13次。之后退出线程。
创建线程,根据界面显示(即默认值1),从图片整体数组中读取第1张图片,加上PGM文件头,更新缓冲区1,更新显示指针指向缓冲区1,刷新显示视图。
创建两个线程,分别从图片整体数组中读取第2和第3张图片,加上PGM文件头,将第2张更新缓冲区2,将第3张更新缓冲区3。
等待用户操作界面。
当用户改变任何参数时(本例包括放大倍数,白色颜色值上限,黑色颜色值下限,图片序号),依次查看三个缓冲区,是否有与该图片属性符合的图片,如果有,则将显示指针指向该缓冲区,刷新显示视图。如果没有,则根据图片序号从图片整体数组中读取相应图片,根据放大倍数以及颜色上下限,对图片做相应变换,加上PGM文件头,更新缓冲区,刷新视图。
如果当前显示的缓冲区的前一个缓冲区中的图片不是相同规格但是之前一张图片的,则更新前一个缓冲区,同理如果后一个缓冲区的图片序号并非与当前显示相邻,则更新后一个缓冲区。
由上可以看出,通过获取MRC格式的图片文件在数据模式为字符类型时的数据信息,由于得到的数据信息是Qt库支持的,所以根据得到的数据信息可以使得Qt库显示该MRC格式的图片文件。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求所述的保护范围为准。