C/C++ OpenCV滑動條的建立與使用
阿新 • • 發佈:2019-02-18
滑動條(Trackbar)是Opencv動態調節引數的一個工具,他依附於視窗存在
建立滑動條:createTrackbar()
int createTrackbar(
const string& trackbarname,
const string& winname,
int *value,
int count,
TrackbarCallback onCahnge=0,
void* userdata=0)
第一個引數:const string&型別的trackbarname,軌跡條的名字,用來代表我們建立的軌跡條
第二個引數:視窗名,表示這個軌跡條依附到哪個視窗上,即對應namedWindow()建立時視窗填的視窗名
第三個引數:int*型別的value,一個指向整形的指標,表示滑塊的位置,在建立時,滑塊的初始位置就是該變數的值。
第四個引數:int型別的count,表示滑塊可以到達的最大位置的值,滑塊最小位置的值始終是0
第五個引數:回撥函式,這個函式必須是void XXX(int,void*)其中第一個引數是軌跡的位置,第二個引數是使用者資料。
第六個引數:void*型別的userdata,預設為0,這個引數是使用者傳遞給回撥函式的資料,三國第三個使用全域性變數的話,這個引數省略
下面是程式碼:
#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; #define WINDOW_NAME "線性混合" //變數宣告 const int g_nMaxAlphaValue = 100; //Alpha的最大值 int g_nAlphaValuesSlider; //滑動條對應的變數 double g_dAlpaValue; double g_dBetaValue; //宣告儲存影象的變數 Mat g_srcImage1; Mat g_srcImage2; Mat g_dstImage; //響應滑動條的回撥函式 void on_Trackbar(int, void *) { //求出當前alpha值對於最大值的比例 g_dAlpaValue = (double)g_nAlphaValuesSlider / g_nMaxAlphaValue; //求出第二張圖片的權重 g_dBetaValue = (1.0 - g_dAlpaValue); //線性混合 addWeighted(g_srcImage1, g_dAlpaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage); //顯示效果圖 imshow(WINDOW_NAME, g_dstImage); } int main() { g_srcImage1 = imread("1.jpg"); g_srcImage2 = imread("2.jpg"); if (!g_srcImage1.data) { printf("第一張讀取失敗\n"); return -1; } if (!g_srcImage2.data) { printf("第二張讀取失敗\n"); return -1; } //設定滑動條的初始位置 g_nAlphaValuesSlider = 50; //建立窗體 namedWindow(WINDOW_NAME); //在建立窗體中建立一個滑動條 char TranckbarName[50] = "透明值100"; createTrackbar(TranckbarName, WINDOW_NAME, &g_nAlphaValuesSlider, g_nMaxAlphaValue, on_Trackbar); on_Trackbar(g_nAlphaValuesSlider, 0); waitKey(); return 0; }
檔案目錄:
執行結果: