2021年2月20日 星期六

OpenCV Trackbar

一般寫影像處理時,不同的環境條件所需設定的參數都不一樣,為了加快自己調整參數的速度,決定使用opencv 的tracker bar做即時調整,而opencv的 tracker bar是callback函式,所以當拉把被移動位置時,會主動跳到callback函式做動作,同時也將當前bar的數值給函式使用,如此一來,就可以即時顯示不同結果,實際使用非常方便,不然從程式端去調整很麻煩,如果大家有更好的做法,也歡迎分享一下~~

Trackbar主要有五個參數要設定,分別為Trackbar的標籤名稱、在哪個視窗顯示Trackbar、Trackbar最大值(最小值預設固定為0)、Trackbar當前數值、callback函式(引數內容固定)

若想要使用兩個Trackbar,只要在第一個參數(標籤名稱)提供另一個名稱就可以,如下所示
	createTrackbar("Param1", "Window", &Param1, SliderMax, on_trackbar);
	createTrackbar("Param2", "Window", &Param2, SliderMax, on_trackbar);


程式碼如下:
#include <cstdio>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

const int SliderMax = 100;
int Param1 = 50;
int Param2 = 0;

Mat GrayImg, OutputImg;

static void on_trackbar(int, void*)
{
	double Alpha = (float)Param1 / 50;
	double Beta = Param2;
	GrayImg.convertTo(OutputImg, -1, Alpha, Beta);
	imshow("Window", OutputImg);
}

int main(){

	Mat SrcImg = imread("dog.jpg", CV_LOAD_IMAGE_COLOR);
	namedWindow("Window", WINDOW_AUTOSIZE);
	
	cvtColor(SrcImg, GrayImg, CV_BGR2GRAY);

	createTrackbar("Param1", "Window", &Param1, SliderMax, on_trackbar);
	createTrackbar("Param2", "Window", &Param2, SliderMax, on_trackbar);

	waitKey(0);
	return 0;
}
結果圖:


或是



備註(參考資料):
1.https://docs.opencv.org/3.4/da/d6a/tutorial_trackbar.html





沒有留言:

張貼留言