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

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

Trackbar

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

目標(biāo)

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

Code

我們來修改本教程中使用OpenCV添加(混合)兩個(gè)圖像的程序。我們將讓用戶使用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)的代碼:

  • 首先,我們加載兩個(gè)將要混合的圖像。
   src1 = imread(“../data/LinuxLogo.jpg”);
   src2 = imread(“../data/WindowsLogo.jpg”);
  • 要?jiǎng)?chuàng)建一個(gè)跟蹤欄,首先我們必須創(chuàng)建一個(gè)它將被放置的窗口。所以:
   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);

請(qǐng)注意以下事項(xiàng):

  1. 我們的Trackbar有一個(gè)標(biāo)簽TrackbarName
  2. Trackbar位于名為L(zhǎng)inear Blend的窗口中
  3. Trackbar值的范圍為到alpha_slider_max(最小限制始終為零)。0
  4. Trackbar的數(shù)值存儲(chǔ)在alpha_slider中
  5. 每當(dāng)用戶移動(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)用戶移動(dòng)軌跡欄時(shí),alpha_slider都會(huì)被更新。
  3. 我們將src1,src2,dist,alpha,alpha_slider和beta定義為全局變量,因此可以隨處使用。

結(jié)果

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

Trackbar

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

Trackbar

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)