一种基于Qt界面的多图像拼接软件的实现方法及其系统技术方案

技术编号:26169959 阅读:73 留言:0更新日期:2020-10-31 13:35
本发明专利技术公开了一种基于Qt界面的多图像拼接的软件实现方法及其系统,该方法包括:配置Qt和OpenCV,创建Qt Gui Application项目;在ui文件中绘制窗口,添加Push Button和Scroll Area,设计对话框;在“.h”文件中添加所需的成员对象;在“.h”头文件中声明所需的成员函数,即与按钮部件对应的槽函数;在与项目同名的“.cpp”文件中建立槽函数与部件信号之间的联系,对槽函数进行定义;编译运行Debug版本和Release版本;对Release版本生成的可执行文件打包发布。本发明专利技术采用Qt界面,极大地提高了程序的跨平台特性,在拼接上,使用OpenCV中的自带方法进行拼接,极大地改善了拼接效果,又使代码更加简洁,并且程序可以输入多幅图像,也降低了拍摄全景图像对拍摄技术和相机空间位置这两项要求。

【技术实现步骤摘要】
一种基于Qt界面的多图像拼接软件的实现方法及其系统
本专利技术涉及一种多图像拼接软件实现技术,具体涉及一种基于Qt界面的多图像拼接的软件实现方法及其系统。
技术介绍
目前单源成像难以满足我们的日常生活需要,例如需要拍摄全景照片时,可能会使用手机相机的全景功能,有时也可能需要两个相机甚至是三个相机,并且需要严格地确定相机位置和高度,来完成全景图像的制作。但是直接使用全景功能可能会因为相机握不稳导致拍摄效果不好,而使用多个相机拼接对摄像头位置和高度的要求过高。因此,需要一种对拍摄技术和相机空间位置这两项要求都不高的技术,来方便全景图像的制作。
技术实现思路
本专利技术的目的在于提供一种基于Qt界面的多图像拼接的软件实现方法及其系统。实现本专利技术目的技术解决方案为:一种基于Qt界面的多图像拼接的软件实现方法,包括如下步骤:步骤1,配置Qt和OpenCV,创建QtGuiApplication项目;步骤2,在ui文件中绘制窗口,添加PushButton和ScrollArea,设计对话框;步骤3,在“.h”文件中添加所需的成员对象;步骤4,在“.h”头文件中声明所需的成员函数,即与所需部件对应的槽函数;步骤5,在与项目同名的“.cpp”文件中建立槽函数与部件信号之间的联系,对槽函数进行定义;步骤6,编译运行Debug版本和Release版本;步骤7,对Release版本生成的可执行文件打包发布。进一步的,步骤2中,在ui文件中绘制窗口,添加PushButton和ScrollArea,设计对话框形式,具体方法如下:在ui文件中绘制窗口,此处添加6个PushButton,4个用于点击后读取图片路径,一个用于点击后开始拼接,一个用于点击后退出程序;再添加4个ScrollArea用于显示待拼接图片。进一步的,步骤3中,在“.h”文件中添加所需的成员对象,具体方法如下:(一)添加QString类型对象,用于接收所读取路径的字符串;(二)添加Mat类型对象,用以将路径下图片暂存,然后压入容器中;(三)添加vector容器,用于存入(二)中的Mat类型对象数据,在以后的步骤中用以作为拼接函数的参数传入而实现拼接;(四)添加string类型对象,用于确定保存拼接结果的文件名,注意要带上扩展名,例如“["dst1.jpg"]”;(五)添加四个QLabel类型指针,用于将(二)中获取的图像显示到ui界面上;(六)添加Mat类型对象,用以保存拼接好的图像。进一步的,步骤4中,在“.h”头文件中声明所需的成员函数,即与按钮部件对应的槽函数,具体方法为:在“private”关键字后面添加宏“slots”,即在“privateslots:”后面进行声明,声明的成员函数如下:(一)函数一:部件一—按钮一对应的槽函数1;(二)函数二:部件二—按钮二对应的槽函数2;(三)函数三:部件三—按钮三对应的槽函数3;(四)函数四:部件四—按钮四对应的槽函数4;(五)函数五:部件五—按钮五对应的槽函数b;(六)函数六:部件六—按钮六对应的槽函数exit。进一步的,步骤5中,在与项目同名的“.cpp”文件中建立槽函数与部件信号之间的联系,具体方法如下:首先是使用“connect”函数建立槽函数与部件信号之间的联系,不同联系关系,函数参数列表也不同,参数简介如下:第一参数:ui.XXX,XXX代表ui对象下的成员名,其部件对象名称在步骤(2)中添加部件时得到;第二参数:SIGNAL(clicked()),由于所有槽函数都是以点击按钮为信号,所以此处都为SIGNAL(clicked());第三参数:this,因为只有一个窗口,仅有一个接收者,所以此都处固定为this即可;第四参数:SLOT(对应槽函数名()),相应部件收到相应信号则执行此槽函数;connect函数的执行可以概括为:当第一参数对应的部件接收到第二参数形式的信号,在第三参数接收者执行第四参数的槽函数,这样就成功将所有按钮部件与槽函数建立联系。进一步的,在与项目同名的“.cpp”文件中对槽函数进行定义,具体方法如下:槽函数1:使用QFileDialog类的成员函数getOpenFileName来读取图像路径、函数参数:第一参数:用于指定父组件,此处固定为this;第二参数:对话框标题字符串;第三参数:默认读取的路径名字符串,为了能够随意寻找路径,将字符串空下,即将双引号直接输入,引号内部无内容即可;第四参数:文件后缀名过滤字符串,因为读取文件必须是图片,所以此处填入:"Images(*.png*.bmp*.jpg*.GIF*.gif)";该函数返回值赋值给QString对象;接下来检测是否成功找到输入路径,使用if语句和QString对象下的成员函数isEmpty,该函数没有参数,只会返回bool类型数据,若相应对象数据为空则返回true,利用if语句判断返回值,若返回值为true则槽函数1直接结束返回,即return;若返回值为false,则继续执行接下来的步骤;接下来初始化一个string类型对象,利用QString类型对象的成员函数toStdString()的返回值,来为string类型对象赋值,因为读取路径下的图像所用的函数,函数参数的路径字符串应为标准string类型;下一步就是使用OpenCV函数“imread”来读取图像,利用Mat类型对象来接收所读取的图像数据;然后就是将刚刚读取到的图像压入vector容器中去,用以拼接;再次初始化一个Mat类型对象,用于下面步骤:然后进行图像大小调整,利用OpenCV的“resize”函数,注意,Qt中有同名函数,这里需要加入命名空间“cv”,即“cv::resize”,函数参数如下:第一参数:待调整图像,此处为Mat类型对象;第二参数:调整后接收使用的图像,此处为甲;第三参数:需调整的尺寸,即Size(长,宽);下一步进行Mat类对象到QImage类对象的转换,首先初始化一个QImage类型对象,对象初始化时需要输入构造函数的参数,各个参数如下:第一参数:图像数据,使用甲的对象“data”来获取数据,注意要进行强制类型转换,将其转换成“constunsignedchar*”型数据;第二参数:图像列数,与调整尺寸后的甲相同,使用甲的对象“cols”来获取数据;第三参数:图像行数,与调整尺寸后的甲相同,使用甲的对象“rows”来获取数据;第四参数:图像存入格式,这里是QImage类里的枚举类型数据,因为OpenCV中图像数据三通道的顺序是B、G、R,所以这里是“QImage::Format_BGR888”;然后初始化QLabel类型指针,使用算符new即可;本文档来自技高网...

【技术保护点】
1.一种基于Qt界面的多图像拼接的软件实现方法,其特征在于,包括如下步骤:/n步骤1,配置Qt和OpenCV,创建Qt Gui Application项目;/n步骤2,在ui文件中绘制窗口,添加Push Button和Scroll Area,设计对话框;/n步骤3,在“.h”文件中添加所需的成员对象;/n步骤4,在“.h”头文件中声明所需的成员函数,即与按钮部件对应的槽函数;/n步骤5,在与项目同名的“.cpp”文件中建立槽函数与部件信号之间的联系,对槽函数进行定义;/n步骤6,编译运行Debug版本和Release版本;/n步骤7,对Release版本生成的可执行文件打包发布。/n

【技术特征摘要】
1.一种基于Qt界面的多图像拼接的软件实现方法,其特征在于,包括如下步骤:
步骤1,配置Qt和OpenCV,创建QtGuiApplication项目;
步骤2,在ui文件中绘制窗口,添加PushButton和ScrollArea,设计对话框;
步骤3,在“.h”文件中添加所需的成员对象;
步骤4,在“.h”头文件中声明所需的成员函数,即与按钮部件对应的槽函数;
步骤5,在与项目同名的“.cpp”文件中建立槽函数与部件信号之间的联系,对槽函数进行定义;
步骤6,编译运行Debug版本和Release版本;
步骤7,对Release版本生成的可执行文件打包发布。


2.根据权利要求1所述的基于Qt界面的多图像拼接的软件实现方法,其特征在于,步骤2中,在ui文件中绘制窗口,添加PushButton和ScrollArea,设计对话框形式,具体方法如下:
在ui文件中绘制窗口,此处添加6个PushButton,4个用于点击后读取图片路径,一个用于点击后开始拼接,一个用于点击后退出程序;再添加4个ScrollArea用于显示待拼接图片。


3.根据权利要求1所述的基于Qt界面的多图像拼接的软件实现方法,其特征在于,步骤3中,在“.h”文件中添加所需的成员对象,具体方法如下:
(一)添加QString类型对象,用于接收所读取路径的字符串;
(二)添加Mat类型对象,用以将路径下图片暂存,然后压入容器中;
(三)添加vector容器,用于存入(二)中的Mat类型对象数据,在以后的步骤中用以作为拼接函数的参数传入而实现拼接;
(四)添加string类型对象,用于确定保存拼接结果的文件名,注意要带上扩展名,例如“["dst1.jpg"]”;
(五)添加四个QLabel类型指针,用于将(二)中获取的图像显示到ui界面上;
(六)添加Mat类型对象,用以保存拼接好的图像。


4.根据权利要求1所述的基于Qt界面的多图像拼接的软件实现方法,其特征在于,步骤4中,在“.h”头文件中声明所需的成员函数,即与按钮部件对应的槽函数,具体方法为:
在“private”关键字后面添加宏“slots”,即在“privateslots:”后面进行声明,声明的成员函数如下:
(一)函数一:部件一—按钮一对应的槽函数1;
(二)函数二:部件二—按钮二对应的槽函数2;
(三)函数三:部件三—按钮三对应的槽函数3;
(四)函数四:部件四—按钮四对应的槽函数4;
(五)函数五:部件五—按钮五对应的槽函数b;
(六)函数六:部件六—按钮六对应的槽函数exit。


5.根据权利要求1所述的基于Qt界面的多图像拼接的软件实现方法,其特征在于,步骤5中,在与项目同名的“.cpp”文件中建立槽函数与部件信号之间的联系,具体方法如下:
首先是使用“connect”函数建立槽函数与部件信号之间的联系,不同联系关系,函数参数列表也不同,参数简介如下:
第一参数:ui.XXX,XXX代表ui对象下的成员名,其部件对象名称在步骤(2)中添加部件时得到;
第二参数:SIGNAL(clicked()),由于所有槽函数都是以点击按钮为信号,所以此处都为SIGNAL(clicked());
第三参数:this,因为只有一个窗口,仅有一个接收者,所以此都处固定为this即可;
第四参数:SLOT(对应槽函数名()),相应部件收到相应信号则执行此槽函数;
connect函数的执行可以概括为:当第一参数对应的部件接收到第二参数形式的信号,在第三参数接收者执行第四参数的槽函数,这样就成功将所有按钮部件与槽函数建立联系。


6.根据权利要求1所述的基于Qt界面的多图像拼接的软件实现方法,其特征在于,步骤5中,在与项目同名的“.cpp”文件中对槽函数进行定义,具体方法如下:
槽函数1:使用QFileDialog类的成员函数getOpenFileName来读取图像路径、函数参数:
第一参数:用于指定父组件,此处固定为this;
第二参数:对话框标题字符串;
第三参数:默认读取的路径名字符串,为了能够随意寻找路径,将字符串空下,即将双引号直接输入,引号内部无内容即可;
第四参数:文件后缀名过滤字符串,因为读取文件必须是图片,所以此处填入:"Images(*.png*.bmp*.jpg*.GIF*.gif)";
该函数返回值赋值给QString对象;
接下来检测是否成功找到输入路径,使用if语句和QString对象下的成员函数isEmpty,该函数没有参数,只会返回bool类型数据,若相应对象数据为空则返回true,利用if语句判断返回值,若返回值为true则槽函数1直接结束返回,即return;若返回值为false,则继续执行接下来的步骤;
接下来初始化一个string类型对象,利用QString类型对象的成员函数toStdString()的返回值,来为string类型对象赋值,因为读取路径下的图像所用的函数,函数参数的路径字符串应为标准string类型;
下一步就是使用OpenCV函数“imread”来读取图像,利用Mat类型对象来接收所读取的图像数据;
然后就是将刚刚读取到的图像压入vector容器中去,用以拼接;
再次初始化一个Mat类型对象,用于下面步骤:
然后进行图像大小调整,利用OpenCV的“resize”函数,注意,Qt中有同名函数,这里需要加入命名空间“cv”,即“cv::resize”,函数参数如下:
第一参数:待调整图像,此处为Mat类型对象;
第二参数:调整后接收使用的图像,此处为甲;
第三参数:需调整的尺寸,即Size(长,宽);
下一步进行Mat类对象到QImage类对象的转换,首先初始化一个QImage类型对象,对象初始化时需要输入构造函数的参数,各个参数如下:
第一参数:图像数据,使用甲的对象“data”来获取数据,注意要进行强制类型转换,将其转换成“constunsignedchar*”型数据;
第二参数:图像列数,与调整尺寸后的甲相同,使用甲的对象“cols”来获取数据;
第三参数:图像行数,与调整尺寸后的甲相同,使用甲的对象“rows”来获取数据;
第四参数:图像存入格式,这里是QImage类里的枚举类型数...

【专利技术属性】
技术研发人员:张纯杨张昊徳笪庆韩玉兵
申请(专利权)人:南京理工大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1