滑動條(Trackbar)是OpenCV動態調節參數特別好用的一種工具。
1. createTrackbar:用於創建一個可以調節整數值的滑動條
int createTrackbar(const String& trackbarname, const String& winname,
int* value, int count,
TrackbarCallback onChange = 0,
void* userdata = 0);
參數1:軌跡條的名字,用來代表創建的軌跡條;
參數2:窗口的名字,表示這個軌跡條會依附在哪個窗口上;
參數3:一個指向整型的指針,表示滑塊的位置;
參數4:表示滑塊可以達到的最大值的位置,滑塊的最小值始終爲0;
參數5:這是一個指向回調函數的指針,默認值爲0,每次滑塊位置改變時,這個函數都會進行回調。函數原型爲void XXXX(int, void*)
;
參數6:void*
類型的userdata
,默認值也爲0,是用戶回傳給回調函數的數據,用來處理軌跡條事件,如果使用的第三個參數value
實參是全局變量的話,完全可以不用管這個userdata
參數。
2. 測試示例
#include "opencvpro/cvtpro.h" //頭文件所在位置
#define WINDOW_NAME "[線性混合示例]"
#define G_NMAXALPHAVALUE 100 //Alpha的最大值
int g_nAlphaValueSlide; //滑動條對應的變量
double g_dAlphaValue;
double g_dBetaValue;
//聲明存儲圖像的變量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
void on_Trackbar(int, void*)
{
g_dAlphaValue = (double)g_nAlphaValueSlide / G_NMAXALPHAVALUE;
g_dBetaValue = 1.0 - g_dAlphaValue;
//根據alpha和beta值進行線性混合
addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);
imshow(WINDOW_NAME, g_dstImage);
}
int main()
{
g_srcImage1 = imread("1.png");
g_srcImage2 = imread("2.png");
if (!g_srcImage1.data)
cout << "read pic1 error." << endl;
if (!g_srcImage2.data)
cout << "read pic2 error." << endl;
g_nAlphaValueSlide = 70;
namedWindow(WINDOW_NAME, 1);
string TrackbarName;
TrackbarName = "透明度" + to_string(G_NMAXALPHAVALUE);
createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlide,
G_NMAXALPHAVALUE, on_Trackbar);
on_Trackbar(g_nAlphaValueSlide, 0);
waitKey(0);
}
3. 測試結果