Opencv—滑動條

createTrackbar()用於創建一個可以調整數值的滑動條(軌跡條),並將滑動條附加在指定的窗口。
注:與回調函數一起配合使用。
int createTrackbar(conststring & trackbarname, conststring & winname, int * value, int count, TrackbarCallback inChange=0, void * userdata=0)

  • conststring & trackbarname 軌跡條名稱;
  • conststring & winname 窗口名稱,表示軌跡條要添加的窗口
  • int * value 軌跡條的位置,創建時設定的初始值
  • int count 軌跡條的最大值,最小值始終是0
  • TrackbarCallback inChange=0 有默認值0,是一個指向回調函數的指針,每次改變軌跡條位置都會調用這個函數,這個函數的原型必須爲 void XXXXXX(int, void*)其中第一個參數是軌跡條的位置,第二個參數是用戶數據(看下面的userdata參數)。如果回調是NULL指針,則表示沒有回調函數調用,僅第三個參數Value有變化。
  • void * userdata=0 有默認值0,這個參數是用戶傳給回調函數的數據,用來處理軌跡條事件。如果第三個參數value是全局變量則不需要管這個userdata參數
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
#define WINDOW_NAME "【線性混合實例】"
//-------------------------【全局變量聲明部分】-----------------------
//     描述:全局變量聲明
//-----------------------------------------------------------------
const int g_nMaxAlphaValue = 100; // Alpha值的最大值
int g_nAlphaValueSlider;                 // 滑動條對應的變量
double g_dAlphaValue;
double g_dBetaValue;
//存儲圖像的變量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
//----------------------------------【on_Trackbar()函數】-----------------------------
//     描述:響應滑動條的回調函數
//-----------------------------------------------------------------------------------
void on_Trackbar(int, void *)
{
	//求出當前alpha值相對於最大值的比例
	g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue;
	//則beta值爲1減去alpha值
	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);
}
//--------------------------------【main()函數】--------------------
//     描述:控制檯應用程序的入口函數
//-----------------------------------------------------------------
int main(int argc, char ** argv)
{
	//加載圖像 (兩圖像的尺寸需相同)
	g_srcImage1 = imread("E:/picture/2.jpg");
	g_srcImage2 = imread("E:/picture/3.jpg");
	if (!g_srcImage1.data)
	{
		printf("讀取第一幅圖片錯誤,請確定目錄下是否由imread函數指定圖片存在~!\n");
		return -1;
	}
	if (!g_srcImage2.data)
	{
		printf("讀取第一幅圖片錯誤,請確定目錄下是否由imread函數指定圖片存在~!\n");
		return -1;
	}
	// 設置滑動條的初值爲70
	g_nAlphaValueSlider = 70;

	//創建窗體
	namedWindow(WINDOW_NAME, 1);
	//在創建的窗體中創建一個滑動條控件
	char TrackbarName[50];
	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;
}

在這裏插入圖片描述

獲取當前軌跡條的位置:
int getTrackbarPos(conststring & trackbarname, conststring & winname);
trackbarname軌跡條的名字
winname,軌跡條父窗口的名稱

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