滑動條的創建
阿新 • • 發佈:2017-11-11
就是 msh void 高斯 gauss 希望 width 心情 pan
雖然之前的學習都有看到過滑動條,但是卻沒有稍微認真一點來看這個東西。今天學習到了濾波之類的東西,又用到了這個。覺得挺有意思的。本來以為只能用鼠標點擊來改變值,沒想到還可以用中間的那個滑輪。
滑動條的創建看上去仿佛非常簡單(實際難不難我不知道,目前還沒看到難的,說不定以後會有,不過現在簡單就夠了),就一條語句就可以了
createTrackbar(1,2,3,4,5);
參數名字我也懶得寫,目前對於我而言我知道怎麽用就行。
1.滑動條名字。就是你這個滑動條調的是什麽。
2.要依附的窗口的名字。你創建一個滑動條,肯定要找一個東西來放是不是。我們在寫這個創建滑動條的語句之前要先放一個窗口出來。namedWindow()就可以了。註意了哦,我們要依附的窗口的名字肯定是要和之前創建的窗口的名字填寫成一樣的。
3.滑動條的初始值。是int*類型的。一般而言,我們會在主程序開始之前就定義一個全局變量,例如,我們定義一個
int g_nContrastValue = 5;
就說明我們希望滑動條的初始值為5,在這裏參數的填寫的時候,加一個&在g_nContrastValue前面就好了(是int*類型的嘛)。
4.滑塊可以到達的的最大的位置的值。這個就看心情了(開玩笑,看程序需要)。
5.回掉函數。emmm,這個仿佛是很重要的。目前我理解的是,要創建一個滑動條出來,一定要有一個函數,而且這個函數的申明方式也是固定的:
void LetUsSetATrack(int , void*);
當然了,函數名自然是可以不一樣的。
這個回掉函數的功能就是,每一次我們改變滑動條的值的時候,程序就會調用這個函數。emmm,也就是說,我們想要用滑動條時憲書額還那麽功能,就一股腦的把這些代碼塞進這個回掉函數就好了。
舉個例子
我們想實現高斯濾波,並用滑動條來控制內核值。
#include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgproc.hpp> using namespace cv; int g_nContrastValue = 5; Mat srcImage; Mat dstImage;static void LetUsSetATrack(int, void *); int main() { srcImage = imread("1.jpg"); namedWindow("【高斯濾波】"); createTrackbar("內核值", "【高斯濾波】", &g_nContrastValue, 50, LetUsSetATrack); waitKey(0); return 0; } static void LetUsSetATrack(int, void*) { GaussianBlur(srcImage, dstImage, Size(g_nContrastValue * 2 + 1, g_nContrastValue * 2 + 1), 0, 0); imshow("【高斯濾波】", dstImage); }
運行效果如下
emmm,就這樣了。。。還是覺得。。自己智商不夠。。。
滑動條的創建