文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

前言

  • 在之前的教程(关于 线性混合亮度和对比度调整)你可能已经注意到,我们需要给我们的程序一些 输入 ,如 \alphabeta。我们通过在终端给出输入完成这一功能。

  • 那么现在我们将使用图形用户界面提供的工具完成这一功能。 OpenCV提供了一些GUI工具(highgui.h)。其中一个就滑动条

    跟踪条 example
  • 在本教程中我们会对之前的两个程序进行修改,它们将会通过滑动条得到输入信息。

目标

在本教程中,你将会学习:

第 1 段(可获 2 积分)

代码

对教程   使用OpenCV合并(混合)两幅图像中的项目进行修改。我们将允许用户通过滑动条输入 \alpha 的值。

#include <cv.h>
#include <highgui.h>

using namespace cv;

/// Global Variables
const int alpha_slider_max = 100;
int alpha_slider;
double alpha;
double beta;

/// Matrices to store images
Mat src1;
Mat src2;
Mat dst;

/**
 * @function on_trackbar
 * @brief Callback for trackbar
 */
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 )
{
 /// Read image ( same size, same type )
 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; }

 /// Initialize values
 alpha_slider = 0;

 /// Create Windows
 namedWindow("Linear Blend", 1);

 /// Create Trackbars
 char TrackbarName[50];
 sprintf( TrackbarName, "Alpha x %d", alpha_slider_max );

 createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );

 /// Show some stuff
 on_trackbar( alpha_slider, 0 );

 /// Wait until user press some key
 waitKey(0);
 return 0;
}
第 2 段(可获 2 积分)

说明

只分析和Trackbar相关的代码:

  1. 首先,加载加载待混合的两幅图像。

    src1 = imread("../../images/LinuxLogo.jpg");
     = imread("../../images/WindowsLogo.jpg");
    
  2. 创建滑动条所属的窗口:

    namedWindow("Linear Blend", 1);
    
  3. 创建Trackbar:

    createTrackbar( trackbarname, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );
    

    注意:

    • 滑动条标签为 trackbarname
    • 滑动条所在窗口名为 “Linear Blend”
    • 滑动条值范围为从 0alpha_slider_max (最小值默认为 0)。
    • 滑动条的值保存在 alpha_slider 
    • 移动滑块, 回调函数 on_trackbar 被调用
  4. 最后我们需要定义回调函数 on_trackbar

    void on_trackbar( int, void* )
    {
     alpha = (double) alpha_slider/alpha_slider_max ;
     beta = ( 1.0 - alpha );
    
     addWeighted( src1, alpha, , beta, 0.0, dst);
    
     imshow( "Linear Blend", dst );
    }
    

    注意:

    • 使用 alpha_slider (integer) 的值计算得到到alpha (double)的值.
    • alpha_slider 在用户每次移动滑块的时候更新。
    • 定义 src1,src2, dist, alpha, alpha_slider 和 beta 为全局变量,能够在任意位置使用。
第 3 段(可获 2 积分)

结果

第 4 段(可获 2 积分)

文章评论