一、建立滑動控件
int createTrackbar(conststring& trackbarname, conststring& 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參數。ios
//建立滑塊函數:名稱+窗口名稱+關聯數據+最大值+回調函數接口 createTrackbar("對比度:", wndName2, &g_nContrastValue, 300, cvTrackbarCallback); createTrackbar("亮 度:", wndName2, &g_nBrightValue, 200, cvTrackbarCallback);
二、獲取滑動控件的位置
int getTrackbarPos(conststring& trackbarname, conststring& winname);
第一個參數,const string&類型的trackbarname,表示軌跡條的名字。
第二個參數,const string&類型的winname,表示軌跡條的父窗口的名稱。c++
示例代碼:函數
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace std; using namespace cv; const string wndName1 = "原始圖片"; const string wndName2 = "效果圖片"; const string trackName = "track"; int g_nContrastValue; //對比度值 int g_nBrightValue; //亮度值 Mat g_srcImage; Mat g_dstImage; void cvTrackbarCallback(int pos, void* data) { //三個for循環,執行運算 g_dstImage(i,j) =a*g_srcImage(i,j) + b for(int y = 0; y < g_srcImage.rows; y++) { for(int x = 0; x < g_srcImage.cols; x++) { for(int c = 0; c < 3; c++) { g_dstImage.at<Vec3b>(y,x)[c]= saturate_cast<uchar>((g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>(y,x)[c] ) + g_nBrightValue ); } } } //顯示圖像 imshow(wndName1, g_srcImage); imshow(wndName2, g_dstImage); } void TrackAndAdjustImage() { g_srcImage = imread("2.jpg"); //讀取圖片1 g_dstImage= Mat::zeros(g_srcImage.size(), g_srcImage.type()); //按照圖片1的尺寸和類型初始化圖片2 g_nContrastValue = 60; //設置對比度初始值 g_nBrightValue = 60; //設置亮度初始值 namedWindow(wndName1, 1); //建立兩個窗口用來對比圖片 namedWindow(wndName2, 1); //建立滑塊函數:名稱+窗口名稱+關聯數據+最大值+回調函數接口 createTrackbar("對比度:", wndName2, &g_nContrastValue, 300, cvTrackbarCallback); createTrackbar("亮 度:", wndName2, &g_nBrightValue, 200, cvTrackbarCallback); cvTrackbarCallback(0, 0); } int main(int argc, char *argv[]) { //ReadImgaeAndShow(); //ROIAndShowImage(); TrackAndAdjustImage(); while(1) { waitKey(6000); } return 0; }