1. 程式人生 > >C/C++ OpenCV滑動條的建立與使用

C/C++ OpenCV滑動條的建立與使用

滑動條(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;
}

檔案目錄:


執行結果: