发明内容
本申请提供一种可降低系统资源消耗的实时视频拼接方法和装置。
根据本申请的第一方面,本申请提供一种实时视频拼接方法,包括:
截取待拼接的第一视频和第二视频,将所述第一视频和所述第二视频对应的一帧图片进行拼接,并获取图片拼接位置的像素点坐标集合;
建立三维网格模型,分别导入所述第一视频和所述第二视频,将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合;
确定待消隐的网格,利用所述三维网格模型的顶点透明度去除所述待消隐的网格,并移动所述三维网格模型以完成拼接。
进一步地,所述将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合,包括:
通过两次坐标映射,将所述图片拼接位置的像素点用所述网格模型中的该像素点的四个顶点坐标表示。
进一步地,所述通过两次坐标映射,将所述图片拼接位置的像素点用所述网格模型中的该像素点的四个顶点坐标表示,包括:
将所述图片中的像素点Px按照由左向右、由下到上的顺序存储在一维数组P[mn]中,其中为n行数,m为列数;
将所述像素点Px转换为二维坐标中的点Pij,Pij所在的位置通过二维坐标表示为P[x/m+1,x%m+1];
将所述二维坐标中的像素点Pij定位到该像素点在所述网格模型上对应网格的四个顶点的坐标为V1[x/m+1,x%m+1,0]、V2[x/m+1,x%m,0]、V3[x/m,x%m,0]和V4[x/m,x%m+1,0]。
进一步地,所述通过两次坐标映射,将所述图片拼接位置的像素点用所述网格模型中的该像素点的四个顶点坐标表示,还包括:
在x轴方向添加一个偏移量,所述偏移量的大小为m;
所述第一视频包括左侧待拼接网格模型,左侧的待拼接像素点的网格顶点的坐标为V11[m,x%m+1,0]、V12[m,x%m,0]、V13[x/m,x%m,0]和V14[x/m,x%m+1,0];
所述第二视频为右侧待拼接网格模型,获取右侧的待拼接像素点的网格顶点的坐标为V21[x/m+m+1,x%m+1,0]、V22[x/m+1+m,x%m,0]、V23[m,x%m,0]和V24[m,x%m+1,0]。
进一步地,所述确定待消隐的网格,利用所述三维网格模型的顶点透明度去除所述待消隐的网格,并移动所述三维网格模型以完成拼接,包括:
将左侧的待拼接像素点坐标集合中的点,所对应的待消隐的网格为设置为由V13[x/m,x%m,0]和V11[m,x%m+1,0]定义的网格;
将右侧的待拼接像素点坐标集合中的点,所对应的待消隐的网格为设置为由V23[m,x%m,0]和V21[x/m+m+1,x%m+1,0]定义的网格;
分别将左侧和右侧的待拼接像素点坐标集合中的消隐网格的顶点的透明度设置为0;
将所述右侧待拼接网格模型向左平移,平移量为所述右侧待拼接像素点和与其对应的所述左侧待拼接像素点的横坐标的差值。
根据本申请的第二方面,本申请提供一种实时视频拼接装置,包括:
视频处理模块,用于截取待拼接的第一视频和第二视频,将所述第一视频和所述第二视频对应的一帧图片进行拼接,并获取图片拼接位置的像素点坐标集合;
模型建立模块,用于建立三维网格模型,分别导入所述第一视频和所述第二视频,将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合;
视频拼接模块,用于确定待消隐的网格,利用所述三维网格模型的顶点透明度去除所述待消隐的网格,并移动所述三维网格模型以完成拼接。
进一步地,所述模型建立模块,还用于通过两次坐标映射,将所述图片拼接位置的像素点用所述网格模型中的该像素点的四个顶点坐标表示。
进一步地,所述模型建立模块,包括:
第一转换单元,用于将所述图片中的像素点Px按照由左向右、由下到上的顺序存储在一维数组P[mn]中,其中为n行数,m为列数;
第二转换单元,用于将所述图片拼接位置的像素点Px转换为二维坐标中的点Pij,Pij所在的位置通过二维坐标表示为P[x/m+1,x%m+1];
第三转换单元,用于将所述二维坐标中的像素点Pij定位到该像素点在所述网格模型上对应网格的四个顶点的坐标为V1[x/m+1,x%m+1,0]、V2[x/m+1,x%m,0]、V3[x/m,x%m,0]和V4[x/m,x%m+1,0];
所述第三转换单元,还用于在x轴方向添加一个偏移量,所述偏移量的大小为m;所述第一视频包括左侧待拼接网格模型,左侧的待拼接像素点的网格顶点的坐标为V11[m,x%m+1,0]、V12[m,x%m,0]、V13[x/m,x%m,0]和V14[x/m,x%m+1,0];所述第二视频为右侧待拼接网格模型,获取右侧的待拼接像素点的网格顶点的坐标为V21[x/m+m+1,x%m+1,0]、V22[x/m+1+m,x%m,0]、V23[m,x%m,0]和V24[m,x%m+1,0]。
进一步地,所述视频拼接模块,包括:
第一处理单元,用于将左侧的待拼接像素点坐标集合中的点,所对应的待消隐的网格为设置为由V13[x/m,x%m,0]和V11[m,x%m+1,0]定义的网格;
第二处理单元,将右侧的待拼接像素点坐标集合中的点,所对应的待消隐的网格为设置为由V23[m,x%m,0]和V21[x/m+m+1,x%m+1,0]定义的网格;
第三处理单元,用于分别将左侧和右侧的待拼接像素点坐标集合中的消隐网格的顶点的透明度设置为0;
拼接单元,用于将所述右侧待拼接网格模型向左平移,平移量为所述右侧待拼接像素点和与其对应的所述左侧待拼接像素点的横坐标的差值。
根据本申请的第三方面,本申请提供一种实时视频拼接装置,包括:
存储器,用于存储程序;
处理器,用于通过执行所述存储器存储的程序以实现上述的方法。
本申请的实时视频拼接方法和装置,包括先将第一视频和第二视频对应的一帧图片进行拼接,并获取图片拼接位置的像素点坐标集合;再建立三维网格模型,分别导入第一视频和第二视频,将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合;确定待消隐的网格,移动网格模型,去除待消隐的网格,完成拼接。本申请只需任意选择一帧图片进行拼接,对于剩余的多帧图片,只需利用三维网格模型的顶点透明度,将两段需要拼接视频的公共区域消隐,直接将两段实时视频拼接起来,减少了系统的计算量和资源消耗,能更好的保证视频的实时性。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。本申请可以以多种不同的形式来实现,并不限于本实施例所描述的实施方式。提供以下具体实施方式的目的是便于对本申请公开内容更清楚透彻的理解,其中上、下、左、右等指示方位的字词仅是针对所示结构在对应附图中位置而言。
然而,本领域的技术人员可能会意识到其中的一个或多个的具体细节描述可以被省略,或者还可以采用其他的方法、组件或材料。在一些例子中,一些实施方式并没有描述或没有详细的描述。
本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。
此外,本文中记载的技术特征、技术方案还可以在一个或多个实施例中以任意合适的方式组合。对于本领域的技术人员来说,易于理解与本文提供的实施例有关的方法的步骤或操作顺序还可以改变。因此,附图和实施例中的任何顺序仅仅用于说明用途,并不暗示要求按照一定的顺序,除非明确说明要求按照某一顺序。
本申请可用于枪机位置处于同一水平高度,倾斜角度相同,拥有公共画面的多个枪机视频拼接。若两个枪机拍摄的画面具有高度差,可以对画面进行裁剪,取其公共画面进行拼接。
实施例一:
本申请提供的一种实时视频拼接方法,其一种实施方式,如图1所示,包括以下步骤:
步骤102:截取待拼接的第一视频和第二视频,将第一视频和第二视频对应的一帧图片进行拼接,并获取图片拼接位置的像素点坐标集合。
截取两段需要进行拼接的实时视频Video1和Video2同一时刻的一帧图片Texture1和Texture2,利用图片拼接算法进行拼接,图片拼接算法可根据实际情况决定。假设两张图片的大小都是m*n(m,n分别表示图片长度和宽度的像素大小),最终获取到两张图片上拼接位置的像素点坐标集合Point1[n]和Point2[n]。
步骤104:建立三维网格模型,分别导入所述第一视频和所述第二视频,将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合。
图片像素的坐标按照由左向右、由下到上的顺序存储在一维数组P[mn]中,数组中每个元素Px代表图片中对应的一个像素的颜色属性值,数组的大小为m*n,其中,m和n分别为自然数,x∈{0,1,2,……mn-1},其排列方式如图2所示。由于图片的二维特性,如图3所示,图片中某一个像素Px所在的位置可以用Pij的形式表示,其中i表示该像素点所在的行数,j表示该像素点所在的列数,所以Px可以表示为P[x/m+1,x%m+1]。
进一步地,为了方便计算以及更直观的表示像素图片与网格模型之间的关系,根据图片大小分别制作两个横向有m个单位网格纵向有n个单位网格的Plane模型Model1和Model2。模型制作完成之后将其依次放置在三维坐标原点出,模型摆放位置如图4所示,同时给两个模型分别接入需要拼接的两个实时视频Video1和Video2。为了方便表示图片和网格模型之间的关系,所建立的网格模型的单位网格数量与图片像素大小一致,所以可以直接根据Px直接定位到该像素点在网格模型上对应的网格顶点坐标,图片中的一个像素点在网格模型上表现为由两个三角形组成的一个正方形的网格,该正方形网格的右上角三维坐标P(V1,V2,V3,V4)可以表示为:V1[x/m+1,x%m+1,0],顺时针方向其余三点分别表示为:V2[x/m+1,x%m,0]、V3[x/m,x%m,0]和V4[x/m,x%m+1,0]。至此,通过两次坐标映射,场景中左侧模型表面图片中的像素点可以用网格模型中的四个顶点坐标表示出来。本实施例以左、右拼接为例进行说明,左侧模型表面图片中像素的坐标可以直接与三维场景坐标对应,而右侧模型表面图片的像素点坐标以及图片中拼接点Point2[n]则需要在x轴方向添加一个偏移量,该偏移量的大小为m,所得拼接点为Point2'[n]。所以,右侧模型表面图片的像素点Px所对应的正方形网格顶点坐标表示为V1[x/m+m+1,x%m+1,0]、V2[x/m+1+m,x%m,0]、V3[m,x%m,0]和V4[m,x%m+1,0]。
步骤106:确定待消隐的网格,利用三维网格模型的顶点透明度去除待消隐的网格,并移动三维网格模型以完成拼接。
从两张图片上可得到的拼接位置的像素点坐标集合Point1[n]和Point2[n]。如图5、图6所示,对于Point1[n]中的点Px,其对应的在网格模型中的正方形网格的左下角的坐标可以表示为V[x/m,x%m,0],同时又因为Point1[n]代表位于左边的网格模型表面图片的拼接点坐标,所以该点对应的消隐的网格为由V[x/m,x%m,0]和V[m,x%m+1,0]所定义的网格。将Point1[n]中每一个像素点对应的消隐网格的定义顶点的透明度设置为0,即为将坐标模型表面图片的公共区域设置为透明。对于Point2'[n]中的点Px,其对应点网格模型中正方形网格的右上角的坐标可以表示为V[x/m+m+1,x%m+1,0]。同时又因为Point2'[n]代表位于右侧的网格模型表面图片的拼接点坐标,所以该点对应的消隐的网格为由V23[m,x%m,0]和V21[x/m+m+1,x%m+1,0]所定义的网格。将Point2'[n]中每一个像素点对应的消隐网格的定义顶点的透明度设置为0,则为将坐标模型表面图片的公共区域设置为透明。
消除公共像素点之后,需要将右侧模型向左平移以完成拼接,平移大小为Point2'[0].x-Point1[0].x。至此,将左右两块面片的公共部分消隐,实现了两组视频的拼接,三维网格拼接示意图如图5所示。
如图7所示,本申请提供的一种实时视频拼接方法,其另一种实施方式,包括以下步骤:
步骤702:截取待拼接的两段实时视频Video1和Video2同一时刻的一帧图片Texture1和Texture2,并获取图片拼接位置的像素点坐标集合Point1[n]和Point2[n]。
其中,两张图片的大小都设为m*n(m,n分别表示图片长度和宽度的像素大小),最终获取到两张图片上拼接位置的像素点坐标集合Point1[n]和Point2[n]。
步骤704:将图片中的像素点Px按照由左向右、由下到上的顺序存储在一维数组P[mn]中,其中为n行数,m为列数。
步骤706:将像素点Px转换为二维坐标中的点Pij,Pij所在的位置通过二维坐标表示为P[x/m+1,x%m+1]。
步骤708:建立三维网格模型,将二维坐标中的像素点Pi j定位到该像素点在网格模型上对应网格的四个顶点的坐标V1[x/m+1,x%m+1,0]、V2[x/m+1,x%m,0]、V3[x/m,x%m,0]和V4[x/m,x%m+1,0]。
通过两次坐标映射,将所述图片拼接位置的像素点用所述网格模型中的该像素点的四个顶点坐标表示。
步骤710:在x轴方向添加一个偏移量,偏移量的大小为m。
步骤712:获取Texture1的待拼接像素点的网格顶点的坐标。Texture1为左侧待拼接网格模型,左侧的待拼接像素点的网格顶点的坐标为V11[m,x%m+1,0]、V12[m,x%m,0]、V13[x/m,x%m,0]和V14[x/m,x%m+1,0];
步骤714:获取Texture2的待拼接像素点的网格顶点的坐标。Texture2为右侧待拼接网格模型,获取右侧的待拼接像素点的网格顶点的坐标为V21[x/m+m+1,x%m+1,0]、V22[x/m+1+m,x%m,0]、V23[m,x%m,0]和V24[m,x%m+1,0]。
步骤716:将左侧的待拼接像素点坐标集合中的点,所对应的待消隐的网格为设置为由V13[x/m,x%m,0]和V11[m,x%m+1,0]定义的网格。
步骤718:将右侧的待拼接像素点坐标集合中的点,所对应的待消隐的网格为设置为由V23[m,x%m,0]和V21[x/m+m+1,x%m+1,0]定义的网格。
步骤720:分别将左侧和右侧的待拼接像素点坐标集合中的消隐网格的顶点的透明度设置为0。
步骤722:将右侧待拼接网格模型向左平移,平移量为右侧待拼接像素点和与其对应的所述左侧待拼接像素点的横坐标的差值。
本申请的实时视频拼接方法,包括先将第一视频和第二视频对应的一帧图片进行拼接,并获取图片拼接位置的像素点坐标集合;再建立三维网格模型,分别导入第一视频和第二视频,将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合;确定待消隐的网格,移动网格模型,去除待消隐的网格,完成拼接。本申请只需任意选择一帧图片进行拼接,对于剩余的多帧图片,只需利用三维网格模型的顶点透明度,将两段需要拼接视频的公共区域消隐,直接将两段实时视频拼接起来,减少了系统的计算量和资源消耗,能更好的保证视频的实时性。
实施例二:
本申请提供的实时视频拼接装置,如图8所示,其一种实施方式,可以包括视频处理模块810、模型建立模块820和视频拼接模块830。
视频处理模块810,可用于截取待拼接的第一视频和第二视频,将第一视频和第二视频对应的一帧图片进行拼接,并获取图片拼接位置的像素点坐标集合。
截取两段需要进行拼接的实时视频Video1和Video2同一时刻的一帧图片Texture1和Texture2,利用图片拼接算法进行拼接,图片拼接算法可根据实际情况决定。假设两张图片的大小都是m*n(m,n分别表示图片长度和宽度的像素大小),最终获取到两张图片上拼接位置的像素点坐标集合Point1[n]和Point2[n]。
模型建立模块820,可用于建立三维网格模型,分别导入视频,将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合。
图片像素的坐标按照由左向右、由下到上的顺序存储在一维数组P[mn]中,数组中每个元素Px代表图片中对应的一个像素的颜色属性值,数组的大小为m*n,其中,m和n分别为自然数,x∈{0,1,2,……mn-1},其排列方式如图2所示。由于图片的二维特性,如图3所示,图片中某一个像素Px所在的位置可以用Pij的形式表示,其中i表示该像素点所在的行数,j表示该像素点所在的列数,所以Px可以表示为P[x/m+1,x%m+1]。
进一步地,为了方便计算以及更直观的表示像素图片与网格模型之间的关系,根据图片大小分别制作两个横向有m个单位网格纵向有n个单位网格的Plane模型Model1和Model2。模型制作完成之后将其依次放置在三维坐标原点出,模型摆放位置如图4所示,同时给两个模型分别接入需要拼接的两个实时视频Video1和Video2。为了方便表示图片和网格模型之间的关系,所建立的网格模型的单位网格数量与图片像素大小一致,所以可以直接根据Px直接定位到该像素点在网格模型上对应的网格顶点坐标,图片中的一个像素点在网格模型上表现为由两个三角形组成的一个正方形的网格,该正方形网格的右上角三维坐标P(V1,V2,V3,V4)可以表示为:V1[x/m+1,x%m+1,0],顺时针方向其余三点分别表示为:V2[x/m+1,x%m,0]、V3[x/m,x%m,0]和V4[x/m,x%m+1,0]。至此,通过两次坐标映射,场景中左侧模型表面图片中的像素点可以用网格模型中的四个顶点坐标表示出来。本实施例以左、右拼接为例进行说明,左侧模型表面图片中像素的坐标可以直接与三维场景坐标对应,而右侧模型表面图片的像素点坐标以及图片中拼接点Point2[n]则需要在x轴方向添加一个偏移量,该偏移量的大小为m,所得拼接点为Point2'[n]。所以,右侧模型表面图片的像素点Px所对应的正方形网格顶点坐标表示为V1[x/m+m+1,x%m+1,0]、V2[x/m+1+m,x%m,0]、V3[m,x%m,0]和V4[m,x%m+1,0]。
视频拼接模块830,可用于确定待消隐的网格,移动所述网格模型,去除待消隐的网格,完成拼接。
从两张图片上可得到的拼接位置的像素点坐标集合Point1[n]和Point2[n]。如图5、图6所示,对于Point1[n]中的点Px,其对应的在网格模型中的正方形网格的左下角的坐标可以表示为V[x/m,x%m,0],同时又因为Point1[n]代表位于左边的网格模型表面图片的拼接点坐标,所以该点对应的消隐的网格为由V[x/m,x%m,0]和V[m,x%m+1,0]所定义的网格。将Point1[n]中每一个像素点对应的消隐网格的定义顶点的透明度设置为0,即为将坐标模型表面图片的公共区域设置为透明。对于Point2'[n]中的点Px,其对应点网格模型中正方形网格的右上角的坐标可以表示为V[x/m+m+1,x%m+1,0]。同时又因为Point2'[n]代表位于右侧的网格模型表面图片的拼接点坐标,所以该点对应的消隐的网格为由V23[m,x%m,0]和V21[x/m+m+1,x%m+1,0]所定义的网格。将Point2'[n]中每一个像素点对应的消隐网格的定义顶点的透明度设置为0,则为将坐标模型表面图片的公共区域设置为透明。
消除公共像素点之后,需要将右侧模型向左平移以完成拼接,平移大小为Point2'[0].x-Point1[0].x。至此,将左右两块面片的公共部分消隐,实现了两组视频的拼接,三维网格拼接示意图如图5所示。
本申请提供的实时视频拼接装置,如图9所示,其另一种实施方式,包括视频处理模块910、模型建立模块920和视频拼接模块930。
视频处理模块910,用于截取待拼接的第一视频和第二视频,将第一视频和第二视频对应的一帧图片进行拼接,并获取图片拼接位置的像素点坐标集合。
模型建立模块920,用于建立三维网格模型,分别导入视频,将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合。
视频拼接模块930,确定待消隐的网格,移动所述网格模型,去除待消隐的网格,完成拼接。
进一步地,模型建立模块920还可用于通过两次坐标映射,将图片拼接位置的像素点用网格模型中的该像素点的四个顶点坐标表示。
进一步地,模型建立模块920可以包括第一转换单元921、第二转换单元922和第三转换单元923。
第一转换单元921,可用于将图片的像素点Px按照由左向右、由下到上的顺序存储在一维数组P[mn]中,其中为n行数,m为列数;
第二转换单元922,可用于将图片拼接位置的像素点Px转换为二维坐标中的点Pij,Pij所在的位置通过二维坐标表示为P[x/m+1,x%m+1];
第三转换单元923,可用于将二维坐标中的像素点Pi j定位到该像素点在所述网格模型上对应网格的四个顶点的坐标为V1[x/m+1,x%m+1,0]、V2[x/m+1,x%m,0]、V3[x/m,x%m,0]和V4[x/m,x%m+1,0];
第三转换单元,还可用于在x轴方向添加一个偏移量,所述偏移量的大小为m;所述第一视频包括左侧待拼接网格模型,左侧的待拼接像素点的网格顶点的坐标为V11[m,x%m+1,0]、V12[m,x%m,0]、V13[x/m,x%m,0]和V14[x/m,x%m+1,0];所述第二视频为右侧待拼接网格模型,获取右侧的待拼接像素点的网格顶点的坐标为V21[x/m+m+1,x%m+1,0]、V22[x/m+1+m,x%m,0]、V23[m,x%m,0]和V24[m,x%m+1,0]。
进一步地,视频拼接模块930可以包括第一处理单元931、第二处理单元932、第三处理单元933和拼接单元934。
第一处理单元931,可用于将左侧的待拼接像素点坐标集合中的点,所对应的待消隐的网格为设置为由V13[x/m,x%m,0]和V11[m,x%m+1,0]定义的网格;
第二处理单元932,可将右侧的待拼接像素点坐标集合中的点,所对应的待消隐的网格为设置为由V23[m,x%m,0]和V21[x/m+m+1,x%m+1,0]定义的网格;
第三处理单元933,可用于分别将左侧和右侧的待拼接像素点坐标集合中的消隐网格的顶点的透明度设置为0;
拼接单元934,可用于将所述右侧待拼接网格模型向左平移,平移量为所述右侧待拼接像素点和与其对应的所述左侧待拼接像素点的横坐标的差值。
本申请的实时视频拼接装置,包括先将第一视频和第二视频对应的一帧图片进行拼接,并获取图片拼接位置的像素点坐标集合;再建立三维网格模型,分别导入第一视频和第二视频,将图片拼接位置的像素点坐标集合转换为网格模型的网格顶点坐标集合;确定待消隐的网格,移动网格模型,去除待消隐的网格,完成拼接。本申请只需任意选择一帧图片进行拼接,对于剩余的多帧图片,只需利用三维网格模型的顶点透明度,将两段需要拼接视频的公共区域消隐,直接将两段实时视频拼接起来,减少了系统的计算量和资源消耗,能更好的保证视频的实时性。
实施例三:
本申请实施例提供的实时视频拼接装置,包括存储器和处理器。
存储器,用于存储程序;
处理器,用于通过执行存储器存储的程序以实现实施例一中的方法。
本领域技术人员可以理解,上述实施方式中各种方法的全部或部分步骤可以通过程序来指令相关硬件完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘或光盘等。以上内容是结合具体的实施方式对本申请所作的进一步详细说明,不能认定本申请的具体实施只局限于这些说明。对于本申请所属技术领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干简单推演或替换。