1. 程式人生 > >HighGUI圖形圖像界面初步——滑動條的創建和使用

HighGUI圖形圖像界面初步——滑動條的創建和使用

恢復 userdata sprint 全局 bsp size sin data mem

---恢復內容開始---

  滑動條是OpenCV動態調節參數特別好用的一種工具,它依附於窗口而存在。由於OpenCV沒有實現按鈕功能,所以很多時候,我們可以用僅含0-1的滑動條來實現按鈕的按下於彈起效果。

1、創建滑動條:createTrackbar()函數

  這個函數往往和一個回調函數配合起來使用。

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

  參數說明:

  (1)第一個參數,軌跡條的名稱;

  (2)第二個參數,窗口名稱;

  (3)第三個參數,表示滑塊的初始位置

  (4)第四個參數,表示滑塊可達到的上限值。

  (5)第五個參數,這是一個執行回調函數的指針,當滑塊位置變化時候這個函數都進行回掉。這個函數原型必須為:void XXXX(int,void*),其中第一個為軌跡位置,第二個為用戶數據。NULL表示沒有回調函數。

  (6)用戶傳給回掉函數的數據,用來處理軌跡時間。如果使用第三個參數value實參是全局變量的話,完全可以不用去管這個userdata參數。

  

// Trackbar.cpp: 定義控制臺應用程序的入口點。
// #include "stdafx.h" #include <opencv2\opencv.hpp> #include "opencv2\highgui\highgui.hpp" using namespace cv; #define WINDOW_NAME "【線性混合示例】" const int g_nMaxAlphaValue = 100; int g_nAlphaValueSlider; double g_dAlphaValue; double g_dBetaValue; Mat g_srcImage1; Mat g_srcImage2; Mat g_dstImage;
void on_TrackBar(int, void*) { g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue; g_dBetaValue = (1.0 - g_dAlphaValue); addWeighted(g_srcImage1, g_dAlphaValue,g_srcImage2,g_dBetaValue,0.0,g_dstImage); imshow(WINDOW_NAME,g_dstImage); } int main() { g_srcImage1 = imread("D:\\resuouce\\image\\scenic1.jpg"); g_srcImage2 = imread("D:\\resuouce\\image\\scenic.jpg"); if (!g_srcImage1.data) { printf("讀取第一張圖片失敗\n"); return -1; } if (!g_srcImage2.data) { printf("讀取第二張圖片失敗\n"); return -1; } g_nAlphaValueSlider = 70; namedWindow(WINDOW_NAME,1); char TrackbarName[50]; memset(TrackbarName,\0,sizeof(TrackbarName)); sprintf_s(TrackbarName,"透明值%d", g_nMaxAlphaValue); createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_TrackBar); on_TrackBar(g_nAlphaValueSlider,0); waitKey(0); return 0; }

---恢復內容結束---

HighGUI圖形圖像界面初步——滑動條的創建和使用