可爱二次元人物图的转换实现(利用opencv滑动条)

可爱二次元人物图的转换实现(利用opencv滑动条)_第1张图片可爱二次元人物图的转换实现(利用opencv滑动条)_第2张图片可爱二次元人物图的转换实现(利用opencv滑动条)_第3张图片滑动条是opencv动态调节参数特别好用的一种工具,它依附于窗口而存在。

我们这里便是应用滑动条实现了小鸟游六花两张美图的转化(doge
创建滑动条:createTrackbar()函数

int createTrackbar(const string&trackname,const string&winname,int*value,int count,TrackbarCallback onchange=0,void*userdata=0);

第一个参数:轨迹条名称
第二个参数:窗口名称
第三个参数:滑块位置
第四个参数:滑块最大值
第五个参数:回调函数
第六个参数:传给回调函数的数据,当value为全局变量是不用写

完整代码如下:(感觉注释写的还算详细)

#include 
#include  
#include
#include
using namespace std;
using namespace cv;
#define WINDOW_NAME "邪王真眼是最强的"
const int g_maxvalue = 100;//Alpha值的最大值
int g_nsilder;//滑动条对应的变量
double g_davalue;
double g_bvalue;
//声明储存图像的变量
Mat src1;
Mat src2;
Mat dst;
//全局变量声明部分
void on_Trackbar(int, void*)
{
     
    g_davalue = (double)g_nsilder / g_maxvalue;//求出当前alpha值相对于最大值的比例
    g_bvalue = (1.0 - g_davalue);//则beta值为1-alpha
    addWeighted(src1, g_davalue, src2, g_bvalue, 0.0, dst);//线性混合
    imshow(WINDOW_NAME, dst);
}
//响应滑动条的回调函数
int main(int argc,char **argv)
{
     
    //加载图像(两图像尺寸需相同)
    src1 = imread("3.jpg");
    src2 = imread("4.jpg");
    g_nsilder = 70;//设置滑动条初值为70
    namedWindow(WINDOW_NAME, WINDOW_NORMAL);//可以自由变化大小的窗口
    char TrackbarName[50];
    sprintf_s(TrackbarName, "纯净度 %d", g_maxvalue);
    createTrackbar(TrackbarName, WINDOW_NAME, &g_nsilder, g_maxvalue, on_Trackbar);
    //创建滑动条控件
    on_Trackbar(g_nsilder, 0);
    //结果在回调函数中显示
    waitKey(0);
    //按任意键退出
    return 0;

}

图片素材如下

可爱二次元人物图的转换实现(利用opencv滑动条)_第4张图片可爱二次元人物图的转换实现(利用opencv滑动条)_第5张图片
欢迎大家的讨论,谢谢大家(

你可能感兴趣的:(opencv学习,opencv,计算机视觉)