halcon与QT联合:(5.4)瓶盖检测以及QT界面搭建
接著上篇博客的鼠標滾輪事件之后,本次要完成的是基于結構體的變量管理以及如何讓參數與界面進行關聯。
---------------------------------1、下面實現的是變量管理----------------------------------
基于結構體的變量管理:
個人習慣:在寫結構體時單獨去寫一個文件,起名為公共部分,(這個部分就可以把需要用到的結構體或者define變量,就是每一個成員都可能會用到的變量都可以放在這里 )
添加---->Add New---->C++,此時可以添加.h文件或者一個類(因為添加類的話.h和.cpp文件你都會包含了,只需要把添加的類構造函數的代碼刪除掉就可以因為我們不寫類,作為普通的.h和.cpp文件來使用了)
把上述對應的代碼刪除掉,因為我們不寫類。
結構體的寫法一共有4種方式,選擇自己最熟悉的寫結構體的方式即可。
下面如果有變量要使用的地方就要使用結構體.的方式來使用變量。
?---------------------------2、下面進行自動加載和保存參數----------------
自動加載和保存參數就是比如本次我們已經修改了參數,比如參數灰度值,下次再使用的時候我們不想再去修改了,就是修改一次之后想保存本次記憶,下次開機自動就是保存上次的參數。這樣每次就不用去修改了。想實現這樣的功能,我們使用的是QSetting的方法。
下面以二值化的灰度閾值進行記錄:
首先在界面上添加參數按鈕:二值化最小閾值和二值化閾值最大值。
(基于上次界面的基礎上,在ui上先把布局打破,然后復制一下打開圖像和計數的按鈕-----復制粘貼是偷懶式的建立按鈕方式。)
?之后進行轉到槽操作,因為此處是int型,所以選擇int的ValueChage(int)。
?下一步就是轉到槽內函數的封裝:
1、先在公共頭文件定義一個結構體進行變量的管理。(就是上一步的變量管理)
?
2、定義結構體之后使用結構體聲明變量。
PramSave PramS;
?3、變量在函數中的使用
(1)首先頭文件中引入QSettings的頭文件。
是QT特有的一個類。 用來保存或讀取一些配置信息用的。
具體代碼如下:
//最小閾值管理的槽
void QtCircleLocation::on_sB_MinThreshold_valueChanged(int arg1)
{//參數處理與保存(1、首先定義一個結構體管理參數)//1、給變量賦值PramS.MinThreshold=arg1;QString group;QString key;QVariant value;//賦值group="main";key="MinThresholdValue";value=QVariant(arg1);//對value進行強制轉化一下//2、保存一個值到我本地文件(使用Qsetting的方法 )QSettings setting(qApp->applicationDirPath()+"/mysave.ini",QSettings::IniFormat);if(group.size()!=0){setting.beginGroup(group);}setting.setValue(key,value);if(group.size()!=0){setting.endGroup();}
}
?
打開這個mysave.ini文件:
?
?main是一個小組,小組里邊有一個成員名稱是ThresholdValue,值為4(就是鍵值對key----value)。
?下面是對于最大值MaxThreshold轉到槽的操作:同上。
?把上述紅框里邊的代碼封裝為一個公共函數,放在公共部分(就是大家都會用到的)。
保存模式:
封裝模式:頭文件中聲明,源文件中定義。(函數聲明與函數定義里邊參數的類型必須一樣,名稱可以不一樣)
聲明:
定義:
函數調用:
加載模式:
加載函數的聲明與定義仍然放在公共部分,但是加載函數的調用放在構造函數里邊,構造函數里邊是程序一啟動就會加載。
加載參數(加載是需要將參數輸出的,輸出的話這里使用的是引用的方法)
?函數聲明:
函數定義:
?函數調用:
最終當你再次運行代碼的時候就會記錄你上次使用的參數:
?下面就界面修改的灰度閾值生效,就需要在處理函數中修改一下:
?首先在處理函數里邊引用在外部cpp定義的變量:(這里就不再定義,直接使用extern使用就行)
?選編在二值化里邊的函數修改一下,由原來的的固定值0和171修改為 PramS.MinThreshold和PramS.MaxThreshold。
?最終結果:
最終的完整代碼見鏈接:
https://download.csdn.net/download/m0_37957160/20688257
總結
以上是生活随笔為你收集整理的halcon与QT联合:(5.4)瓶盖检测以及QT界面搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zotero使用
- 下一篇: 数字图像处理:(5)非微分算子在数字图像