程序运行流程如下:
(1)点击背景保存按钮,保存当前环境下取种盘背景图片。
(2)在取种盘内放入随机分布的麦粒后,点击阈值调整按钮,不断改变二值化阈值,直至取种盘内麦粒轮廓效果达到可提取要求。
(3)点击坐标提取按钮,对当前取种盘内图像进行图像处理,使用(2)中阈值进行二值化分割,而后采用canny算子进行轮廓提取,计算得到麦粒最小外接矩形的中心点坐标,并将结果标记在图像上。
(4)点击信息保存按钮,将坐标信息保存至指定路径的文本文件中或通过串口发送至执行机构。
(1)安装Qt
首先,在Qt官网下载Qt安装包,由于项目拟在windows系统中运行,所以选择windows版本的软件安装包。
然后,点击安装,先后经过账号登陆、安装目录选择(安装目录的文件路径尽量不带中文)、选择组件(由于在VS2017中编程,所以编译器中的msvc2017 64bit组件需要勾选)、然后按提示进行,直至安装成功。
最后,对Qt的环境变量进行配置(主要是在系统环境变量的path路径中加入bin文件夹路径)。【注意:使用VS2017编写的程序,若是想直接运行exe文件,必须在环境变量中将msvc2017_64编译器的bin文件放在优先位置,同时出现几个不同的bin文件(即不同的编译器),系统会按照环境变量的配置位置挑选优先的编译器编译】
(2)安装opencv
opencv安装步骤较为简单,相关环境配置也都有较为清楚的教程,不再赘述。
(3)配置VS2017&Qt&opencv的项目环境
1 在VS2017中对Qt进行配置
在工具-拓展与更新-联机中,搜索Qt,选择Qt Visual Studio Tools组件进行安装。
安装成功后,关闭VS2017,重启电脑,完成组件的安装。
重新打开VS2017,菜单栏出现新的选项“Qt Vs Tools”,点击该选项,依次选择Options-Versions-add new Qt Version,Version一栏输入msvc2017_64,Path一栏输入msvc2017_64文件夹中bin文件夹的文件路径,并勾选该项。
至此,Qt&VS2017的环境配置完成。
2 在VS2017新建一个Qt项目,并对该项目进行有关opencv的环境配置。
打开VS2017,依次点击文件-新建-项目。
在弹出窗口的左栏设置新建项目的类型,依次选择已安装、Visual C++、跨平台、Qt、Qt Widgets Application,设置好项目存储位置、项目名称,点击确定。
弹出Qt项目的初始页面,点击Next;弹出Qt项目的编译器选择页面,选择Debug&64位类型编译环境,点击Next;弹出新的页面,可以更改项目基类的名称、类型,完成后点击Finish。
至此,VS2017中的Qt项目完成创建。
接下来,对opencv的相关环境进行配置,依次点击项目-属性-,弹出项目属性设置页面
配置上选择Debug,平台选择64;点击VC++目录,在包含目录中新建两个文件地址,分别为…(opencv安装位置)\build\include\opencv2、…(opencv安装位置)\build\include,在库目录中新建一个文件地址,为…(opencv安装位置)\build\x64\vc15\lib;点击链接器-输入-附加的依赖项,新建一项,名称为opencv_world451d.lib。
至此,VS2017&Qt&opencv4.5.1的项目环境配置完成。
Qt的界面设计可采用直接拖入的方式,依据先前所设想的功能,设置了四个功能按钮、一个文本显示框、一个保存标志、可以调整阈值的数据输入框及图像处理方法选择的功能区。界面布局如图2所示:
图2 ui界面布局
使用相机得到的图像之前需要对相机进行标定,消除图像畸变,确保后期得到的图像坐标真实可靠。采用20*20的黑白格石英标定板作为校正板,利用张正友标定法求取相机径向和切向畸变参数,并利用求出的畸变参数对图像进行校正。
图3标定板图像
(1) system()函数简介
该函数的主要功能是在软件运行起始状态时,设置好各显示控件的初始值,打开摄像头,运行connect函数,以设置好信号与槽函数的连接。
System函数代码如图4所示:
图4 System函数代码截图
(2) tuxiangchuli.cpp文件简介
该文件中主要编写了关于图像处理的函数,在opencv库的基础上,封装了关于图像灰度化、二值化、图像平滑、边缘检测等函数,以便于主程序的调用。
Tuxiangchuli.cpp中各函数声明如图5所示:
图5 各函数声明
(3) connect()函数简介
本程序围绕四个功能按钮,编写了四个connect函数,依次实现了背景保存、图像处理方法选择、坐标计算、结果显示与保存四个功能。
Connect函数声明如图6所示:
图6 Connect函数声明
下面对四个函数进行详细介绍:
1 背景保存【void Djdragon::btn_bj_clicked()】
首先打开摄像机获取当前图像,观察其效果,效果满足预期,则使能保存标志,保存当前图像至“Beijing.jpg”文件中。
2 图像处理【void Djdragon::btn_yz_clicked()】
获取图像后,对图像先后进行灰度化、中值滤波、二值化、形态学开运算,然后用canny算子对图像中的小麦籽粒进行轮廓提取,在此过程中不断调整二值化阈值,以确保所有麦粒的轮廓均被提取。调整至最佳状态时,保存当前图片至“helloword.png”文件中。
3 坐标提取【Djdragon::btn_zb_clicked()】
在此函数中,分别对背景图片和待处理图片进行相关处理,用待处理图片减去背景图片,以消除外界光照不稳定的干扰,进而提取小麦轮廓,计算麦粒轮廓的最小外接矩形的中心像素坐标,并将坐标信息进行显示。
4 信息保存【void Djdragon::btn_bc_clicked()】
在本函数中,弹出文件对话框,选择存储坐标信息的文本文件,将坐标信息保存。便于下一级设备的使用。