【OpenCV学习】--Task4:两张图像融合并设置滑动条控制透明度
一、环境
系统: Ubuntu16.04
OpenCV版本: OpenCV3.2
语言: C++
IDE: Clion
——————————————————————————————————————————————————————————
二、图片
图片一:初音ミク/Hatsune Miku
图片二:初音ミク/Hatsune Miku
三、代码
- CMakeLists.txt
cmake_minimum_required( VERSION 2.8 )
project( task4_createTrackerbar )
set( CMAKE_BUILD_TYPE Release)
set( CMAKE_CXX_FLAGS "-std=c++11 -o3")
find_package( OpenCV 3.2 REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable( task4_createTrackerbar test2.cpp)
target_link_libraries( task4_createTrackerbar ${OpenCV_LIBS})
- 源码
//
// Created by hri on 18-11-5.
// 主要就是创建一个滑动条
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
#define WINDOW_NAME "线性混合示例"
const int g_nMaxAlphaValue = 100;// Alpha值的最大值
int g_nAlphaValueSlider;//滑动条对应的变量
double g_dAlphaValue;
double g_dBeteValue;
// --申明一些存储图像的变量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_srcImage;
void on_Trackbar( int, void*)
{
// --求出当前的alpha值对应的最大值的比例
g_dAlphaValue = (double) g_nAlphaValueSlider / g_nMaxAlphaValue;
// --beta的值就是用1减去alpha的值咯
g_dBeteValue = (1.0 - g_dAlphaValue );
// --根据alpha和deta的值进行线性混合
addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBeteValue, 0.0, g_srcImage);
imshow(WINDOW_NAME, g_srcImage);
}
int main( int argc, char** argv)
{
// --想说的就是这组图真的很好看
g_srcImage1 = imread("/home/hri/Project/LearnOpenCV/task4_createTrackerbar/chuyin1.jpeg");
g_srcImage2 = imread("/home/hri/Project/LearnOpenCV/task4_createTrackerbar/chuyin2.jpeg");
if ( !g_srcImage1.data )
{
printf("Error,No Image1!");
}
if ( !g_srcImage2.data)
{
printf("Error,No Image2!");
}
g_nAlphaValueSlider = 70;
namedWindow(WINDOW_NAME,1);
// --在创建的窗体中创建一个滑动条控件
char TrackbarName[50];
sprintf(TrackbarName, "透明度 %d", g_nMaxAlphaValue);
createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);
on_Trackbar( g_nAlphaValueSlider, 0);
waitKey(0);
return 0;
}
效果很赞~
四、Results
效果真很赞,具体在我的gitlab上面:https://gitlab.com/Bingoren/learnopencv.git