图像----滑动条
1、
函數(shù)形式: C++:?int?createTrackbar(const string&?trackbarname, onst string&?winnacme, int*?value, int?count, TrackbarCallbackonChange=0, void*?userdata=0)
const string&?trackbarname:滑動條的名稱
const string&?winname:;;滑動條顯示的窗口
int*?value:滑動條變化的值
int?count:value最大的值
on_change:每次滑塊位置被改變的時候,被調(diào)用函數(shù)的指針。這個函數(shù)應(yīng)該被聲明為void Foo(int,void*); 如果沒有回調(diào)函數(shù),這個值可以設(shè)為NULL。int 是value的值,調(diào)用函數(shù)Foo(int ,void)void*?userdata=0:用戶信息
例子: #include <cv.h> #include <highgui.h>using namespace cv;/// 全局變量的聲明與初始化 const int alpha_slider_max = 100; int alpha_slider; double alpha; double beta;/// 聲明存儲圖像的變量 Mat src1; Mat src2; Mat dst;/** * @function on_trackbar * @定義響應(yīng)滑動條的回調(diào)函數(shù) */ void on_trackbar( int, void* ) {alpha = (double) alpha_slider/alpha_slider_max ;beta = ( 1.0 - alpha );addWeighted( src1, alpha, src2, beta, 0.0, dst);imshow( "Linear Blend", dst ); }int main( int argc, char** argv ) {/// 加載圖像 (兩圖像的大小與類型要相同)src1 = imread("../../images/LinuxLogo.jpg");src2 = imread("../../images/WindowsLogo.jpg");if( !src1.data ) { printf("Error loading src1 \n"); return -1; }if( !src2.data ) { printf("Error loading src2 \n"); return -1; }/// 初始化為零alpha_slider = 0;/// 創(chuàng)建窗體namedWindow("Linear Blend", 1);/// 在創(chuàng)建的窗體中創(chuàng)建一個滑動條控件char TrackbarName[50];sprintf( TrackbarName, "Alpha x %d", alpha_slider_max );createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );/// 結(jié)果在回調(diào)函數(shù)中顯示on_trackbar( alpha_slider, 0 );/// 按任意鍵退出waitKey(0);return 0; }
CreateTrackbar函數(shù)
函數(shù)作用: 創(chuàng)建一個滑動條函數(shù)形式: C++:?int?createTrackbar(const string&?trackbarname, onst string&?winnacme, int*?value, int?count, TrackbarCallbackonChange=0, void*?userdata=0)
const string&?trackbarname:滑動條的名稱
const string&?winname:;;滑動條顯示的窗口
int*?value:滑動條變化的值
int?count:value最大的值
on_change:每次滑塊位置被改變的時候,被調(diào)用函數(shù)的指針。這個函數(shù)應(yīng)該被聲明為void Foo(int,void*); 如果沒有回調(diào)函數(shù),這個值可以設(shè)為NULL。int 是value的值,調(diào)用函數(shù)Foo(int ,void)void*?userdata=0:用戶信息
例子: #include <cv.h> #include <highgui.h>using namespace cv;/// 全局變量的聲明與初始化 const int alpha_slider_max = 100; int alpha_slider; double alpha; double beta;/// 聲明存儲圖像的變量 Mat src1; Mat src2; Mat dst;/** * @function on_trackbar * @定義響應(yīng)滑動條的回調(diào)函數(shù) */ void on_trackbar( int, void* ) {alpha = (double) alpha_slider/alpha_slider_max ;beta = ( 1.0 - alpha );addWeighted( src1, alpha, src2, beta, 0.0, dst);imshow( "Linear Blend", dst ); }int main( int argc, char** argv ) {/// 加載圖像 (兩圖像的大小與類型要相同)src1 = imread("../../images/LinuxLogo.jpg");src2 = imread("../../images/WindowsLogo.jpg");if( !src1.data ) { printf("Error loading src1 \n"); return -1; }if( !src2.data ) { printf("Error loading src2 \n"); return -1; }/// 初始化為零alpha_slider = 0;/// 創(chuàng)建窗體namedWindow("Linear Blend", 1);/// 在創(chuàng)建的窗體中創(chuàng)建一個滑動條控件char TrackbarName[50];sprintf( TrackbarName, "Alpha x %d", alpha_slider_max );createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );/// 結(jié)果在回調(diào)函數(shù)中顯示on_trackbar( alpha_slider, 0 );/// 按任意鍵退出waitKey(0);return 0; }
程序說明
我們只分析關(guān)于滑動條的那段代碼:
#.首先, 我們加載了兩個圖像, 目的是把它們混合顯示.
src1 = imread("../../images/LinuxLogo.jpg"); src2 = imread("../../images/WindowsLogo.jpg");#.在創(chuàng)建滑動條之前, 我們要先創(chuàng)建一個窗體,以便把創(chuàng)建的滑動條放置在上面:
namedWindow("Linear Blend", 1);現(xiàn)在可以創(chuàng)建滑動條了:
createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );記住下面的參數(shù)介紹:
- 在標(biāo)簽中顯示的文字(提示滑動條的用途)?TrackbarName
- 創(chuàng)建的滑動條要放置窗體的名字?“Linear Blend”
- 滑動條的取值范圍從??到?alpha_slider_max?(最小值只能為?zero).
- 滑動后的值存放在?alpha_slider?變量里
- 每當(dāng)滑動條的值改變, 就會調(diào)用?on_trackbar?回調(diào)函數(shù)
最后, 我們還要定義這個回調(diào)函數(shù)?on_trackbar?來實(shí)現(xiàn)我們想要的結(jié)果
void on_trackbar( int, void* ) {alpha = (double) alpha_slider/alpha_slider_max ;beta = ( 1.0 - alpha );addWeighted( src1, alpha, src2, beta, 0.0, dst);imshow( "Linear Blend", dst ); }注意回調(diào)函數(shù)中的整型與雙精度型的轉(zhuǎn)換:
- 從滑動條中獲取的整型值?alpha_slider?(integer) 要轉(zhuǎn)換為雙精度類型?alpha.
- alpha_slider?的值會在滑動條滑動后被修改.
- 我們所定義的?src1,?src2,?dist,?alpha,?alpha_slider?和?beta?都是全局變量, 因此也可以在回調(diào)函數(shù)中使用.
結(jié)果
-
下圖是程序的運(yùn)行結(jié)果:
-
也可以使用其它方式驗(yàn)證, 你可以用?改變圖像的對比度和亮度?中的例程實(shí)現(xiàn)兩個滑動條. 一個控制??另一個控制?. 可能的輸出會是下面的樣子:
總結(jié)
- 上一篇: 图像窗口方面 window
- 下一篇: getTrackbarPos函数