• opencv4 滑动条控件+图片线性混合


    最简易的实例,该说的都在代码里了。

    #include "opencv2/core.hpp"
    #include "opencv2/imgproc.hpp"
    #include "opencv2/highgui.hpp"
    #include "opencv2/videoio.hpp"
    #include <iostream>
    using namespace cv;
    using namespace std;
    #define WINDOW_NAME "test"
    
    struct data{
        int* value_mx;
        Mat* img1;
        Mat* img2;
    };
    
    // 回调函数,第一个值为滑动条的位置
    // 第二个值为用户传来的数据的指针,
    //      一定是void*的,所以使用的时候要做类型转换
    void on_Trackbar(int value_now, void *usrdata)
    {
        data* d = (data*)usrdata;
    
        int v_mx = *((*d).value_mx);
        Mat img1 = *((*d).img1);
        Mat img2 = *((*d).img2);
        Mat res;
        
        double alpha = (double)value_now / (double)v_mx;
        double bata = 1 - alpha;
        addWeighted(img1, alpha, img2, bata, 0.0, res);
        imshow(WINDOW_NAME,res);
    }
    
    int main(int argc, char ** argv)
    {
           //加载图像,都得是jpg
            Mat _img1 = imread("/home/eva/图片/Wallpapers/kuangsan.jpg");
            Mat _img2 = imread("/home/eva/图片/Wallpapers/f2.jpg");
    
            //两图像的尺寸需相同,所以我直接切割了
            Mat img1(_img1,Rect(0,0,1000,1000));
            Mat img2(_img2, Rect(0, 0, img1.cols, img1.rows));
    
           // 设置滑动条的最大值为100
           int value_mx = 100;
           // 设置滑动条的初值为60
           int value_now = 60;
    
           // 创建窗体
           namedWindow(WINDOW_NAME, 1);
    
           //等会线性混合时需要用到的数据
           data x;
           x.value_mx = &value_mx;
           x.img1 = &img1;
           x.img2 = &img2;
    
           // 在创建的窗体中创建一个滑动条控件
           createTrackbar("a", WINDOW_NAME, &value_now, value_mx, on_Trackbar,&x);
           /*
           参数说明:
           1.滑动条名称
           2.滑动条附加在哪个窗体上
           3.滑动条的当前值,一直是变化的
           4.滑动条的最大值
           5.回调函数,每次滑动条变化,都会被调用
           6.用户要传给回调函数的数据
            */
    
           waitKey(0);
           return 0;
    }
    View Code

    效果

    alpha = 0

    alpha = 100

    alpha = 50

  • 相关阅读:
    threejs 通过bufferGeometry处理每一个点的位置和颜色
    nodejs通过buffer传递数据到前端,前端通过arraybuffer接收数据
    ubuntu 通过ssh上传/下载服务器文件
    前端通过浏览器导出文件并下载
    前端imageBuffer设置图片src(后端到前端直传buffer)
    一个FLAG #17# 测试STL
    一个FLAG #16# 优先队列
    一个FLAG #15# 团队队列
    一个FLAG #14# The SetStack Computer
    一个FLAG #13# V字型数列
  • 原文地址:https://www.cnblogs.com/InitRain/p/12882339.html
Copyright © 2020-2023  润新知