一种使用OpenCV显示图像的方法与流程

文档序号:13136327阅读:2387来源:国知局
一种使用OpenCV显示图像的方法与流程

本发明涉及图像模式识别软件开发领域,特别涉及一种使用opencv显示图像的方法。



背景技术:

opencv即“开源计算机视觉库”(opensourcecomputervisionlibrary)是1999年由intel(英特尔公司)组织建立一组由500多个c函数组成的跨平台、开源的中、高层“应用程序接口”api(applicationprogramminginterface,应用程序编程接口)开发库。由于是基于bsd(berkeleysoftwaredistribution,伯克利软件套件)许可的开源,所以任何人都可以从其网站上下载该库的源程序、运行库,并在自己的程序调用后,不需要公布源代码,且可以用于商业软件而大受欢迎。目前,该开发库可以运行在linux、windows和macos操作系统上,其最新版本是3.1,于2015年12月发布的。

难能可贵的是,作为图像处理的中高层应用,opencv开发库提供了很多当前图像处理中很多热门技术的算法。但是opencv考虑到自身系统的封闭性,以及不受windows多种多样界面显示方式的干扰,所以在opencv中,绝大多数与图像有关的显示都是在opencv自主弹出的窗口中完成的,而不是在用户当前的应用软件窗口内显示,这种弹出式窗口的显示方式,用户体验度较低。较低的用户体验给用户不友好的感受,有的用户就会对整个软件产生不好的感觉,最终放弃使用该软件。



技术实现要素:

本发明要解决的技术问题是为了克服现有技术中使用opencv显示图像会弹出新窗口导致用户体验度较低的缺陷,提供一种能够在用户当前的应用软件窗口中显示图像提高用户体验度的使用opencv显示图像的方法。

本发明是通过下述技术方案来解决上述技术问题的:

一种使用opencv显示图像的方法,其特征点于,包括以下步骤:s1、在应用软件中调用opencv库函数,打开或生成待显示图像;s2、获取结构体iplimage中的nchannels、width、height、widthstep和imagedata的值,所述imagedata用于存储待显示图像的opencv格式的像素点的值;s3、simagedata用于存储所述待显示图像的所述应用软件所用格式的像素点的值;当所述待显示图像的像素点的坐标为(x,y)时,判断nchannels的值,如果所述nchannels为1,simagedata(x,y).b赋值为imagedata(x,y),simagedata(x,y).g赋值为imagedata(x,y),simagedata(x,y).r赋值为imagedata(x,y),simagedata(x,y).a赋值为0;如果所述nchannels为3,simagedata(x,y).b赋值为imagedata(x,y).b,simagedata(x,y).g赋值为imagedata(x,y).g,simagedata(x,y).r赋值为imagedata(x,y).r,simagedata(x,y).a赋值为0;s4、使用nchannels、width、height、widthstep、simagedata在所述应用软件的窗口中显示所述待显示图像。

本方案中,通过opencv库函数中iplimage结构中的各项参数获知待显示图像的图像矩阵中各像素的位置及表示方式,经数据格式转换后显示在所述应用软件的窗口中。其中,按opencv的定义,从iplimage结构中的imagedata成员中依次读出待显示图像的每一个像素点的值,并根据其色彩空间,将其转换为待显示图像在所述应用软件中所用格式的像素点的值,存储在所述应用软件中自定义的simagedata数组中,然后将simagedata中数据显示在所述应用软件的窗口中,而不是直接由opencv自带的函数由弹出窗口显示图像。其中width,height分别表示图像的宽度和高度,nchannels表示的是颜色通道数目,而widthstep则表示图像中一行像素的总字节数。所谓色彩空间是指,当nchannels为1时,表示是灰度显示,当nchannels为3时,表示是彩色显示。对于nchannels为4的情况,处理方法同nchannels为3时类似,对于nchannels为2的情况,本方案中不做限制。另外,本方案中,x和y均代表数据的下标,所以最小值均为0,均为整数。

较佳地,所述步骤s3中,当所述待显示图像的深度为8时,imagedata(x,y)和simagedata(x,y)中像素点的位置的对应关系为:当nchannels为1时,simagedata(x,y)=imagedata(y×widthstep+x);当nchannels为3时,simagedata(x,y)=imagedata(y×widthstep+x×3)。

本方案中,如果nchannels为1即表示灰度显示时,像素点的值的格式转换具体可以概括为在灰度图中,图像的深度是8时,simagedata图像坐标(x,y),对应iplimage结构中的imagedata数据组的位置是(y×widthstep+x);如果是nchannels为3的彩色显示,像素点的值的格式转换具体可以概括为simagedata图像坐标(x,y)由b(蓝)、g(绿)、r(红)三个连续的字节组成,对应iplimage结构中的imagedata数据组的位置是(y×widthstep+x×3)开始的连续三个字节组成,排列顺序为b、g、r。

较佳地,所述步骤s4之前还包括以下步骤:设置所述待显示图像在所述应用软件的窗口中的位置。

通过本方案,能够将待显示图像显示在所述应用软件的窗口中的任意位置。

较佳地,所述步骤s4之前还包括以下步骤:设置所述待显示图像在所述应用软件的窗口中显示的图像尺寸。

通过本方案,能够将待显示图像以任意大小显示在所述应用软件的窗口中。

较佳地,所述应用软件为windows软件。

本发明的积极进步效果在于:本发明提供的使用opencv显示图像的方法通过对opencv中iplimage结构的各成员参数及成员函数的调用、处理及数据转换,实现了opencv与应用软件的对接,使得调用opencv处理的图像可以直接显示在应用软件窗口中,而不必弹出新的窗口,提高了用户体验度。

附图说明

图1为本发明一较佳实施例的一种使用opencv显示图像的方法的流程图。

图2为图1中步骤104中灰度图像显示时imagedata到simagedata的转换示意图。

图3为图1中步骤104中nchannels为3图像显示时imagedata到simagedata的转换示意图。

具体实施方式

下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。

一种使用opencv显示图像的方法,包括以下步骤:

101、vc(microsoft公司推出的以c++语言为基础的开发windows环境程序,面向对象的可视化集成编程系统)环境中创建用于在windows的应用软件中显示图像的函数myshowwindow,函数包括如下参数:ioffsetx,ioffsety,iwidth,iheight,imagesize,simagedata;其中的ioffsetx,ioffsety表示图像显示在应用软件窗口的相对位置,可以根据需要指定,iwidth,iheight分别表示图像的宽度和高度,imagesize表示的是待显示图像的像素所占用的数据缓冲区的大小,imagesize的值由iwidth×iheight×4得到,simagedata用于存储待显示图像在应用软件所用格式的像素点的值。

102、在应用软件中调用opencv库函数,打开或生成待显示图像,其中图像大小在opencv中设置好。

103、获取结构体iplimage中的nchannels、width、height、widthstep和imagedata的值,其中imagedata用于存储待显示图像的opencv格式的像素点的值,width,height分别表示图像的宽度和高度,nchannels表示的是颜色通道数目,而widthstep则表示图像中一行像素的总字节数。

104、转换数据,具体包括imagedata到simagedata的转换以及将width、height分别赋值给iwidth和iheight;对于imagedata到simagedata的转换, 当待显示图像的像素点的坐标为(i,j)时,判断nchannels的值,如图2所示,箭头指到的数据为simagedata,引出箭头的数据代表imagedata,如果nchannels为1,为灰度图像显示,simagedata(i,j).b赋值为imagedata(i,j),simagedata(i,j).g赋值为imagedata(i,j),simagedata(j,j).r赋值为imagedata(i,j),simagedata(i,j).a赋值为0;如图3所示,箭头指到的数据为simagedata,箭头发出的数据代表imagedata,如果所述nchannels为3,simagedata(i,j).b赋值为imagedata(i,j).b,simagedata(i,j).g赋值为imagedata(i,j).g,simagedata(i,j).r赋值为imagedata(i,j).r,simagedata(i,j).a赋值为0。

105、设置ioffsetx,ioffsety的值,具体根据显示需要设定。

106、调用步骤101中创建的函数myshowwindow在应用软件的窗口中显示待显示图像,其中myshowwindow的参数ioffsetx,ioffsety,iwidth,iheight,imagesize,simagedata的值均在前述步骤中获得。

本实施例的步骤104中,当待显示图像的深度为8时,imagedata(i,j)和simagedata(i,j)中像素点的位置的对应关系为:

当nchannels为1时,simagedata(i,j)=imagedata(j×widthstep+i);

当nchannels为3时,simagedata(i,j)=imagedata(j×widthstep+i×3)。

本实施例中,步骤104中,imagedata(i,j)和simagedata(i,j)的转换理论上存在着多种组合,但从原理上并没有本质区别,并且也不影响本方法的正确性。但附带补充说明如下:nchannels理论上可以是1-4,4通道通常为rgba,3通道为rgb(是工业界的一种颜色标准,rgb即是代表红、绿、蓝三个通道的颜色),比较常用,2通道图像不常见,通常在程序处理中会用到,如傅里叶变换,可能会用到,一个通道为实数,一个通道为虚数,主要是编程方便,1通道为平常的灰度图像显示,只有一个像素值。目前主要使用的是1灰度图像显示和3即rgb或yuv(是被欧洲电视系统所采用的一种颜色编码方法)图像显示,而2使用的很少,具体为自定义数据格式,这也是公知常识,故2此处不展开描述;4通道时同3通道类似,直接将 imagedatar、g、b及a分别赋值给simagedata的对应r、g、b和a即可。如果是yuv,则根据通用公式转换成rgb即可,通用公式属于公开资料,故本处不做详述。

本实施例根据应用软件中图像显示的原理,通过分析opencv中iplimage图像结构的各成员参数及成员函数的意义及组成方式获知道图像矩阵中各像素的位置及表示方式,实现了二者的对接,即直接实现了opencv与应用软件程序的完美结合。本实施例提供的使用opencv显示图像的方法的意义在于程序员可以借助于这一方法,在windows任意窗口的任意位置,显示任意大小的opencv图像,而不用弹出新窗口,提高了用户体验度。

虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1