zoukankan      html  css  js  c++  java
  • c/c++_渐变动画制作_合成视频

    1、渐变动画制作原理:

          两幅图像加权相加,img = a*img1 + (1-a)img2,效果从img1变到img2,取值从1到0,取值间隔可以随意,间隔越小,视觉上越自然。

    2、代码 (c/c++_渐变动画制作_合成视频)

    我的运行平台:VS2015,  window10 64位,opencv 3.4.5. 

    #include <opencv2/opencv.hpp>
    #include <opencv2/opencv.hpp>
    
    using namespace cv;
    
    
    void gradient(cv::Mat& im1_src, cv::Mat& im2_src, VideoWriter writer, const char* save_pth_video)
    {
        cv::resize(im1_src, im1_src, cv::Size(im2_src.cols, im2_src.rows), 0, 0, cv::INTER_CUBIC);
    
        cv::Mat im_src_blur1, im_src_blur2, im_src_blur3, im_src_blur4, im_src_blur5, im_src_blur6, im_src_blur7, im_src_blur8, im_src_blur9;
        cv::Mat im_src_blur10, im_src_blur0;
    
        im_src_blur0 = 1 * im1_src + 0 * im2_src;
        im_src_blur1 = 0.9*im1_src + 0.1*im2_src;
        im_src_blur2 = 0.8*im1_src + 0.2*im2_src;
        im_src_blur3 = 0.7*im1_src + 0.3*im2_src;
        im_src_blur4 = 0.6*im1_src + 0.4*im2_src;
        im_src_blur5 = 0.5*im1_src + 0.5*im2_src;
        im_src_blur6 = 0.4*im1_src + 0.6*im2_src;
        im_src_blur7 = 0.3*im1_src + 0.7*im2_src;
        im_src_blur8 = 0.2*im1_src + 0.8*im2_src;
        im_src_blur9 = 0.1*im1_src + 0.9*im2_src;
        im_src_blur10 = 0 * im1_src + 1 * im2_src;
    
        cv::Size size = im_src_blur10.size();
        writer.open(save_pth_video, CV_FOURCC('M', 'J', 'P', 'G'), 2, size, true);
        writer.write(im_src_blur0);
        writer.write(im_src_blur1);
        writer.write(im_src_blur2);
        writer.write(im_src_blur3);
        writer.write(im_src_blur4);
        writer.write(im_src_blur5);
        writer.write(im_src_blur6);
        writer.write(im_src_blur7);
        writer.write(im_src_blur8);
        writer.write(im_src_blur9);
        writer.write(im_src_blur10);
    }
    
    int main() {
        const char* save_pth_video = "56_result.avi";
        const char* im1_pth = "./pic/5.jpg";
        const char* im2_pth = "./pic/6.jpg";
    
        cv::Mat im1_src = cv::imread(im1_pth);
        cv::Mat im2_src = cv::imread(im2_pth);
        VideoWriter writer;
        gradient(im1_src, im2_src, writer, save_pth_video);
    
        return 0;
    }

    采用的图像为:

    合成的效果为:

    不知道怎么插入视频了。自己运行自己看吧。

  • 相关阅读:
    ElasticSearch(十二):Spring Data ElasticSearch 的使用(二)
    ElasticSearch(十):Elasticsearch集群配置
    Linux下设置postgresql数据库开机启动
    PostgreSQL分区表实现——pg_pathman安装、配置
    Postgresql日志配置
    Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    Docker(5):Docker镜像基本操作(上)
    数学建模之路----遗传算法
    MATBLAB学习笔记----基础绘图
    ffmpeg音频视频转格式工具使用
  • 原文地址:https://www.cnblogs.com/wjjcjj/p/12191150.html
Copyright © 2011-2022 走看看