当前位置: 首页 > news >正文

OpenCV图像拼接(10)用于实现图像拼接过程中的时间流逝(timelapse)效果的一个类cv::detail::Timelapser

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::detail::Timelapser 是 OpenCV 库中用于实现图像拼接过程中的时间流逝(timelapse)效果的一个类。它通常用于将一系列的图像或视频帧组合成一个平滑过渡的序列,常应用于延时摄影(time-lapse photography)或者视频合成等领域。

这个类的主要作用是管理图像拼接的过程,并提供一种方法来创建不同类型的 Timelapser 实例,以适应不同的需求和场景。

主要成员函数

  • createDefault(): 静态成员函数,用于创建一个默认类型的 Timelapser 对象。根据传入的参数类型,可以生成不同策略的时间流逝实例。

  • apply(): 应用当前的拼接设置到输入图像上,生成拼接结果。该函数可能有不同的重载形式,以支持不同类型的操作和输入。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/stitching/detail/timelapsers.hpp>
#include <vector>

using namespace cv;
using namespace cv::detail;
using namespace std;

int main()
{
    // 图像文件列表
    vector< String > img_names = { "/media/dingxin/data/study/OpenCV/sources/images/lapsetimer1.png", "/media/dingxin/data/study/OpenCV/sources/images/lapsetimer2.png",
                                   "/media/dingxin/data/study/OpenCV/sources/images/lapsetimer3.png" };
    vector< Mat > imgs;

    // 加载所有图像
    for ( const auto& name : img_names )
    {
        Mat img = imread( name, IMREAD_COLOR );  // 确保以彩色模式读取图像
        if ( img.empty() )
        {
            cout << "无法加载图像: " << name << endl;
            return -1;
        }
        imgs.push_back( img );
    }

    // 创建Timelapser实例
    Ptr< Timelapser > timelapser = Timelapser::createDefault( Timelapser::AS_IS );

    // 初始化Timelapser,假设所有图像具有相同的尺寸
    Size dst_size = imgs[ 0 ].size();
    vector< Point > corners;  // 每个图像对应的角落位置
    vector< Size > sizes;     // 每个图像的尺寸

    for ( size_t i = 0; i < imgs.size(); ++i )
    {
        corners.push_back( Point( 0, 0 ) );  // 假设每个图像都在左上角
        sizes.push_back( dst_size );         // 所有图像具有相同的尺寸
    }

    timelapser->initialize( corners, sizes );

    // 处理每张图像
    for ( size_t i = 0; i < imgs.size(); ++i )
    {
        Mat img_converted;
        imgs[ i ].convertTo( img_converted, CV_16SC3 );  // 将图像转换为16位深度、三通道的短整型格式

        timelapser->process( img_converted, noArray(), Point( 0, 0 ) );  // 使用noArray()作为mask,假设不需要掩码

        // 获取当前帧的结果
        UMat result_umat = timelapser->getDst();
        Mat result;
        result_umat.copyTo( result );  // 将UMat转换为Mat以便显示或保存
        Mat restoredImageMat;
        result.convertTo( restoredImageMat, CV_8U );  // 如果需要的话,调整数据类型以适应显示

        imshow( "Current Frame", restoredImageMat );
        waitKey( 300 );  // 暂停一段时间以便观察每一帧
    }

    // 获取最终拼接结果
    UMat final_result_umat = timelapser->getDst();
    Mat final_result;
    final_result_umat.copyTo( final_result );
    imwrite( "final_timelapse.jpg", final_result );
    cout << "时间流逝视频的最后一帧已保存为 final_timelapse.jpg" << endl;

    return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/95759.html

相关文章:

  • 【产品小白】产品视角的RAG
  • 进程状态:Linux的幕后指挥管理,穿越操作系统进程的静与动
  • 自然语言处理|高效法律助手:AI如何解析合同条款?
  • ChatBI的流程图
  • 深入探究成都国际数字影像产业园的运营模式
  • 一周掌握Flutter开发--9. 与原生交互(上)
  • Spring-boot引入nacos但未生效
  • 如何使用RK平台的spi驱动 spidev
  • 检查指定的IP地址和端口号是否可以连接
  • Vue与Supabase交互文档
  • 【MySQL基础】数据库及表基本操作
  • HarmonyOS NEXT——【鸿蒙原生应用加载Web页面】
  • ThreadLocal与Cookie + Session?
  • Audacity Nyquist插件开发:定义输入框和获取用户输入
  • Unity 运行时更换Animator状态里的动画剪辑
  • Docker部署minio,SSL证书问题与两个解决方案
  • 【数据结构】栈 与【LeetCode】20.有效的括号详解
  • Spring Boot分布式项目实战:装饰模式的正确打开方式
  • 【网络】:应用层 —— HTTP协议
  • CloudCompare (CC)中ccHObject详解
  • 故障扭曲棱镜反射照片效果ps特效滤镜样机 Distorted Mirror Poster Effect
  • 日志打印级别定义
  • 高精度除法
  • SPI通信协议
  • uvm sequence
  • zsh安装以及安装配置oh-my-zsh安装zsh-autosuggestionszsh-syntax-highlighting
  • 条件变量与生产者-消费者模型
  • Unix/Linux 系统下的文件权限
  • D3524 PWM控制芯片详解:特性、参数与典型应用
  • arm非对齐访问编译器选项