你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。

视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。

我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所需片段的最小数目,如果无法完成该任务,则返回 -1

Input: clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], T = 10
Output: 3
Explanation: 
We take the clips [0,2], [8,10], [1,9]; a total of 3 clips.
Then, we can reconstruct the sporting event as follows:
We cut [1,9] into segments [1,2] + [2,8] + [8,9].
Now we have segments [0,2] + [2,8] + [8,10] which cover the sporting event [0, 10].

思路:

给了一堆区间,要求选取最少的区间,这些区间能覆盖[0, T]区间。要想最少区间,就要每个区间尽可能大,覆盖的范围广。

//直观想法,从起点0开始,获取到最长的片段终点,然后再用得到的额终点作为起点,在来获取新的片段终点,直到T为止public int videoStitching(int[][] clips, int T) {int res = 0;int e = 0;while (e < T) {int tmp = e;e = getLongest(e, clips);if (tmp == e) return -1;++res;}return res;}// 获取最长片段,输入起点,输出终点private int getLongest(int s, int[][] clips) {int max = 0;for (int[] c : clips) {if (c[0] <= s && c[1] >= s) max = Math.max(max, c[1]);}return max;}

和jump game II类似

利用贪心算法,先对数组排序,先按开始数值从小到大排序,若两者相等,在按照结束节点排序。

用一个curend表示每一选中的最大片段范围的结束点数值,当遍历到clips[i][0]>curend,表示从i开始不能被之前的curend覆盖,所以需要选中一个新的区间,然后更新curend为最新得到的最大值。

 public int videoStitching0(int[][] clips, int T) {int len=clips.length;Arrays.sort(clips, new Comparator<int[]>() {@Overridepublic int compare(int[] c1, int[] c2) {if (c1[0] != c2[0]) {return c1[0] - c2[0];}return c2[1] - c1[1];}});if(clips[0][0]>0)return -1;int res=0;int curend=0;//代表被选中的范围的首尾for(int i=0;i<len;){if(clips[i][0] > curend) {//有间隔,无法保证0--T被覆盖return -1;}int tempend=curend;while(i<len&&clips[i][0]<=curend){//表示遍历的第i个片段的起点在选取的end前面,所以要通过比较得出更大的end数值tempend=Math.max(tempend,clips[i][1]);i++;}res++;//最新的i位置的开始数值不在end前面,所以需要加1,需要在来一个区间if(tempend>=T){return res;}curend=tempend;}return -1;}

不使用排序,更快一点,先用一个数组 end[T],下标代表的是其实节点,数组的数值代表以下标作为起始节点的片段的最大结束节点,然后再用循环来如何最少拼接。从0开始,开始为上个的结束的值+1,新的结束点为之前得到的end数组中的最大的结束的值

 public int videoStitching2(int[][] clips, int T) {int len=clips.length;if(len==0)return -1;int end[]=new int[T];for(int t[]:clips){if(t[0]>=T)continue;end[t[0]]=Math.max(t[1],end[t[0]]);}int l=0,r=0,last=0,res=0;while(true){for(int i=l;i<=r;i++){last=Math.max(last,end[i]);}if(last<=r)return -1;//相当于有断裂,clips[i][0]>curendres++;if(last>=T)return res;l=r+1;r=last;}}

动态规划,最慢

 //动态规划public int videoStitching3(int[][] clips, int T) {int[][] dp= new int[T+1][T+1];for(int i=0; i<=T; i++){for(int j=0; j<=T; j++){dp[i][j]=101;}}for(int[] clip : clips){int s=clip[0];int r=clip[1];for(int len=1; len<=T; len++){for(int start=0; start<=T-len; start++){int right= start+len;if(s>right || r<start){continue;}if(s<=start && r>=right){dp[start][right]=1;}else if(s<=start){dp[start][right]= Math.min(dp[start][right], dp[r][right]+1);}else if( r>=right){dp[start][right]= Math.min(dp[start][right], dp[start][s]+1);}else if(s>start && r<right){dp[start][right]= Math.min(dp[start][right], dp[start][s]+1+dp[r][right]);}}}}return( dp[0][T]==101 ? -1 :dp[0][T]) ;}

Video Stitching1024 视频拼接相关推荐

  1. 如何使用Autopano Video Pro进行全景视频拼接?

    from:http://news.expoon.com/c/20160816/15281.html 如何使用Autopano Video Pro进行全景视频拼接? 全景摄影一直很受欢迎,但是很少有摄影 ...

  2. Boilsoft Video Joiner(视频无损拼接)V9.1.3开心版 全网独一

    Boilsoft Video Joiner是强大的视频合并工具,可将AVI,MPEG,MPG,VOB,RM/RMVB,3GP,ASF,WMV,WMA,MP4,MP4A,​​MKV或FLV文件等连接到一 ...

  3. IOS视频编辑,视频裁剪,视频拼接,音频处理,视频处理

    前言 用代码在简单视频编辑中,主要就是加美颜.水印(贴图).视频截取.视频拼接.音视频的处理,在美颜中,使用GPUImage即可实现多种滤镜.磨皮美颜的功能,并且可以脸部识别实时美颜等功能,这个有很多 ...

  4. Python 多个视频拼接成一个视频工具(附代码) | Python工具

    目录 前言 环境依赖 代码 总结 前言 本文提供将多个视频拼接为一个视频的Python工具代码,其中有一些限制条件,下面的代码说明会提到. 环境依赖 ffmpeg环境安装,可以参考我的另一篇文章:wi ...

  5. 七牛云实现视频拼接和转码

    最近做的功能需要拼接视频,使用七牛云的智能多媒体服务可以满足大部分音视频处理需求,收费也还可以. 需求:直播课上完,将录制的直播视频存起来,以便用户回放观看. 解决方案: 使用七牛云,直播课上完,将录 ...

  6. 全景视频拼接的关键技术与发展优势、作用、应用。

    全景视频拼接是一种利用实景图像组成全景空间的技术,它将多幅图像拼接成一幅大尺度图像或360度全景图.全景视频技术涉及到计算机视觉.计算机图形学.数字图像处理以及一些数学工具等技术.全景拼接基本步骤主要 ...

  7. python opencv 图片/视频 拼接

    python opencv 图片/视频 拼接 # coding: utf-8 # 像写诗一样写代码 import numpy as np import cv2img_A_path = "C: ...

  8. OpenCV进行视频拼接

    最近实验室需要做个Demo,要把两个视频拼到一个窗口里面进行播放.于是写了个使用ROI来实现两个视频拼接到一起的代码,但是该代码的前提是两个视频的帧数.宽高都一样. #include "st ...

  9. 如何把两个视频拼接在一起?这些工具太棒了!

    如何把两个视频拼接在一起?对于自媒体行业的人来讲,平时在进行短视频的剪辑时,总会需要合并多个视频,之后再剪辑处理.不过对于大部分没有从事自媒体行业的人来讲,可能对合并视频并不了解.下面我就来给大家分享 ...

最新文章

  1. 总奖金300万的AI Challenger 2018进入第二阶段,决赛在即!
  2. 回应关于《BCH五月硬分叉是伪需求》的疑问
  3. Centos 安装Docker
  4. 文件上传案例——客户端和服务端套接字
  5. github ssl验证跳过
  6. BOOST库介绍(二)——BOOST多线程相关库
  7. 我的世界android制作教程,《我的世界手机版》怎么制作mod制作JS教程图文攻略
  8. 使用playsound播放音频(python)
  9. python怎么识别拼音-python+拼音
  10. 联想笔记本G50-70无线网卡问题
  11. 超级计算机也无法算尽圆周率,如果圆周率算尽了,会出现什么后果?
  12. 戴尔笔记本插入耳机用不了耳机的麦克风
  13. ElasticSearch License过期更新
  14. vue-pdf 插件 不翻页 滚动效果
  15. 抖音做直播有哪些技巧,抖音新手直播应该注意什么:国仁楠哥
  16. 图像去燥:NLM、BM3D
  17. 手把手教你安装vivado2015.4开发环境
  18. 毒鸡汤词汇类的前端小程序源码模板
  19. 相约,一朵春天的微笑
  20. 判断点在多边形内外的简单算法

热门文章

  1. position inherit 定位
  2. Openresty实现web应用防火墙(waf)
  3. 动画《魁拔妖侠传》反思
  4. Content Negotation在Nancy的实现和使用
  5. arduino红外热释电传感器_【Arduino】108种传感器系列实验(17)-热释电传感器模块-Arduino中文社区 - Powered by Discuz!...
  6. Python数据分析与机器学习7-Seaborn之调色版
  7. 2016Bytecup之菜鸟进阶
  8. 使用JXTA技术建立P2P网络(转)
  9. excel表的下载模板
  10. ubuntu16.04搭建cptn+crnn