createTrackbar函數使用

createTrackbar函數使用

聲明:文中部分代碼和語言摘錄自毛星雲所著《OpenCV3編程入門一書以及他的博客,如有侵權,請聯繫我編輯》

createTrackbar是OpenCV中的API,其可在顯示圖像的窗口中快速創建一個滑動控件,用於手動調節閾值,具有非常直觀的效果。

1、函數定義

CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname,int* value, int count,TrackbarCallback onChange = 0,void* userdata = 0);

第一個參數,const string&類型的trackbarname,表示軌跡條的名字,用來代表我們創建的軌跡條。
第二個參數,const string&類型的winname,填窗口的名字,表示這個軌跡條會依附到哪個窗口上,即對應namedWindow()創建窗口時填的某一個窗口名。
第三個參數,int* 類型的value,一個指向整型的指針,表示滑塊的位置。並且在創建時,滑塊的初始位置就是該變量當前的值。
第四個參數,int類型的count,表示滑塊可以達到的最大位置的值。PS:滑塊最小的位置的值始終爲0。
第五個參數,TrackbarCallback類型的onChange,首先注意他有默認值0。這是一個指向回調函數的指針,每次滑塊位置改變時,這個函數都會進行回調。並且這個函數的原型必須爲void XXXX(int,void*);其中第一個參數是軌跡條的位置,第二個參數是用戶數據(看下面的第六個參數)。如果回調是NULL指針,表示沒有回調函數的調用,僅第三個參數value有變化。
第六個參數,void*類型的userdata,他也有默認值0。這個參數是用戶傳給回調函數的數據,用來處理軌跡條事件。如果使用的第三個參數value實參是全局變量的話,完全可以不去管這個userdata參數

typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);  

該回調函數的形參有兩個,分別是pos變量,即用在滑動條的變量,另一個是void*類型的userdata,在調用時有默認值爲0。

2.使用

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
/*爲了能在被調函數中使用,所以設置成全局的*/
static int val;
static void back(int, void*);
static Mat srcImage, dstImage;
int main()
{
    namedWindow("滑動條測試");
    srcImage = imread("1.jpg");
    dstImage = srcImage.clone();
    val = 100;
    createTrackbar("變量值", "滑動條測試", &val, 300, back,0);
    imshow("原圖", srcImage);
    waitKey();
}

static void back(int, void*)
{
    threshold(srcImage, dstImage, val, 255, CV_THRESH_BINARY);
    imshow("滑動條測試", dstImage);
}

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章