前言:
本文内容来自于CSDN技能树的练习:本文的目的在实践后,给出更详细的内容和实践体会。
1 构建环境:
1.1 编译环境的搭建
技能树的源码需要构建到项目里面才能运行,我的系统编译环境如下:
1 系统以及软件环境:
Cmake 3.22.3
MinGW 6.0 x86_64-8.1.0-release-posix-seh-rt_v6-rev0
GDB 11.1
GCC version 8.1.0
opencv 3.4.16
环境搭建主要就是opencv的标准搭建,新建项目比较好一点。因为,毕竟版本还是不一样。
1.2 搭建参考
新项目搭建,可以参考我的这篇博客。
CLION 编译环境搭建
1.3 编译
编译大致没有问题:
我这个版本需要修改
- 头文件 #include <opencv2/opencv.hpp>
- 图片的位置
2 效果:
调节Bar条,可以调节两张图的重叠的明暗程度。
3 源码:
【案,这里转的CSDN的例子,我做的修改主要是编译问题和选图】
#include <opencv2/opencv.hpp>
#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
* @定义响应滑动条的回调函数
*/
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/weibull2.png");
src2 = imread("../../images/weibull.png");
if( !src1.data ) { printf("Error loading src1 \n"); return -1; }
if( !src2.data ) { printf("Error loading src2 \n"); return -1; }
/// 初始化为零
alpha_slider = 0;
/// 创建窗体
namedWindow("Linear Blend", 1);
/// 在创建的窗体中创建一个滑动条控件
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;
}