在我們的應(yīng)用程序中添加一個Trackbar

2018-10-01 22:00 更新
  • 在以前的教程(關(guān)于線性混合和亮度和對比度調(diào)整)中,您可能已經(jīng)注意到,我們需要給我們的程序一些輸入,例如和。我們通過使用終端輸入這些數(shù)據(jù)來實現(xiàn)αbeta
  • 那么現(xiàn)在是使用一些花哨的GUI工具的時候了。OpenCV 為您提供了一些GUI實用程序(highgui.hpp)。一個例子就是Trackbar

Trackbar

  • 在本教程中,我們將修改我們之前的兩個程序,以便它們從軌跡欄獲取輸入信息。

目標(biāo)

在本教程中,您將學(xué)習(xí)如何:

Code

我們來修改本教程中使用OpenCV添加(混合)兩個圖像的程序。我們將讓用戶使用Trackbar 輸入值 α。本教程代碼如下所示。您也可以從這里下載:

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <stdio.h>
using namespace cv;
const int alpha_slider_max = 100;
int alpha_slider;
double alpha;
double beta;
Mat src1;
Mat src2;
Mat dst;
static 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( void )
{
   src1 = imread("../data/LinuxLogo.jpg");
   src2 = imread("../data/WindowsLogo.jpg");
   if( src1.empty() ) { printf("Error loading src1 \n"); return -1; }
   if( src2.empty() ) { printf("Error loading src2 \n"); return -1; }
   alpha_slider = 0;
   namedWindow("Linear Blend", WINDOW_AUTOSIZE); // Create Window
   char TrackbarName[50];
   sprintf( TrackbarName, "Alpha x %d", alpha_slider_max );
   createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );
   on_trackbar( alpha_slider, 0 );
   waitKey(0);
   return 0;
}

說明

我們只分析與Trackbar相關(guān)的代碼:

  • 首先,我們加載兩個將要混合的圖像。
   src1 = imread(“../data/LinuxLogo.jpg”);
   src2 = imread(“../data/WindowsLogo.jpg”);
  • 要創(chuàng)建一個跟蹤欄,首先我們必須創(chuàng)建一個它將被放置的窗口。所以:
   namedWindow("Linear Blend", WINDOW_AUTOSIZE); // Create Window
  • 現(xiàn)在我們可以創(chuàng)建Trackbar:
   char TrackbarName [50];
   sprintf(TrackbarName,“Alpha x%d”,alpha_slider_max);
   createTrackbar(TrackbarName,“Linear Blend”,&alpha_slider,alpha_slider_max,on_trackbar);

請注意以下事項:

  1. 我們的Trackbar有一個標(biāo)簽TrackbarName
  2. Trackbar位于名為Linear Blend的窗口中
  3. Trackbar值的范圍為到alpha_slider_max(最小限制始終為零)。0
  4. Trackbar的數(shù)值存儲在alpha_slider中
  5. 每當(dāng)用戶移動的TrackBar,回調(diào)函數(shù)on_trackbar被稱為
  • 最后,我們必須定義回調(diào)函數(shù)on_trackbar

static 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 );
}

注意:

  1. 我們使用alpha_slider(integer)的值來獲取alpha的double值。
  2. 每次當(dāng)用戶移動軌跡欄時,alpha_slider都會被更新。
  3. 我們將src1,src2,dist,alpha,alpha_slider和beta定義為全局變量,因此可以隨處使用。

結(jié)果

  • 我們的程序產(chǎn)生以下輸出:

Trackbar

  • 作為一種實踐方式,您還可以添加兩個軌道欄,以改變圖像的對比度和亮度!。一個軌跡欄設(shè)置α,另一個設(shè)置為β。輸出可能如下所示:

Trackbar

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號