《多路监控视频实时拼接》原理及案例分享

什么是多路监控视频拼接?

针对监控摄像头,将多个相互之间画面有重叠的视频流通过鱼眼矫正->透视变换->裁切->拼接成一路完整的全景视频。

即通过视频拼接技术,对有重叠区域的多路源视频数据利用拼接算法进行无缝实时拼接,消除重叠区域,形成宽角度、大视场视频图像,从而实现将多路监控视频拼接成一路视频,使拼接后的视频清晰无缝,并实时播放,同时支持回放查看,解决多个人同时对同一监控场景不同角度进行观看的需求,充分满足用户的需求。

传统监控的痛点?

 (1)视频画面分散、信息孤岛:在传统视频监控系统中,监管人员需要观看多个分镜头画面,很难将零散的分镜头视频与其实际地理位置对应,无法对大场景进行全局实时监测和历史事件的快速回溯查找,海量零散监控视频资源既“看不过来”又“看不太懂”。

(2)AI 单画面分析、数据价值低:在监控AI识别中,一个目标可能会出现在多个镜头中,识别算法去重难度大,且识别计算效率低。

(3)单画面中标定信息,有重复:在视频流中标定目标信息,由于单个目标出现在多个画面中,导致标定信息重复,信息冗余,通过全景视频可以在全景视频中实时标定目标信息,唯一且准确。

如何解决痛点?

通过多路视频拼接,将多个摄像头视频实时拼接为一路全景视频。拼接过程:

Step1:鱼眼(畸变)矫正:

由于制造、安装、工艺等原因,镜头存在着各种畸变。为了提高摄像机拼接的精度,在进行视频拼接的时候必须考虑镜头的畸变。一般的畸变分为内部畸变、外部畸变,内部畸变是由于摄像头本身的构造原因产生的,外部畸变为投影方式的集合因素产生的,镜头畸变属于内部畸变。

通过鱼眼矫正,将画面进行视觉拉伸调整。

Step2:透视变换:

由于不同摄像头安装的高低、远近、角度不同,拍摄的画面并不在同一投影平面上,如果对重叠的图像直接进行无缝拼接,会破坏实际画面的视觉一致性。所以要先对图像进行透视等变换,调整为一致的视角,再进行拼接。

Step3:视频裁切:

对拼接后的画面,裁切多余的部分,保留最终视频画面。

拼接后的结果:

不同客户对拼接后视频的使用需求各有不同,可以根据需求来定制,已支持的方式如下:

(1)方式一:通过我们自带的播放器观看拼接后的全景视频画面

(2)方式二:内存共享视频流,该方式适用于在本机中做视频分析,效率更高

(3)方式三:拉流的方式,我们输出指定格式的实时视频流,如RTSP,FLV(适合于web播放)等格式,该方式在局域网或者外网中看全景视频,或者做AI识别。

应用场景

应用于安防监控、智能交通、港口、保密单位出入口、园区、矿山、井下、工厂等场景。

应用案例

案例一:8路港口视频的拼接

拼接前效果:

拼接后的效果:

元镜像

,赞7

案例二:6路港口视频的拼接

拼接前效果:

拼接后的效果:

常见问题:

1. 支持的摄像头有哪些?

答:常见的海康、大华、宇视、天地伟业等摄像头、NVR都支持。即只要设备支持国标28181协议,或者国际标准ONVIF,RTSP等格式均可。

2. 拼接后的延时大概是?

答:延时一般在600ms左右,具体跟服务器、带宽等配置有关。

3. 交付的是软件还是硬件?

答:交付的是软件,包含(1)后台服务有-视频接入服务、拼接服务,部署在客户服务器中;(2)拼接工具,含web工具和客户端工具。

4. 需要配置什么硬件,配置要求是?

答:需要服务器一台,推荐Nvidia RTX 2060 及以上显卡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实时视频横向拼接的程序可以使用Python的OpenCV库来实现。以下是基本步骤: 1. 导入OpenCV库。 2. 使用cv2.VideoCapture()函数读取每一个视频源文件,获取视频帧数、分辨率等信息。 3. 新建一个输出视频文件,设置输出视频格式、分辨率等参数。 4. 使用cv2.VideoWriter()函数初始化输出视频文件。 5. 使用while循环遍历每一个视频源文件的每一帧,将每一个视频源文件的每一帧图像进行横向拼接,并把拼接后的图像写入输出视频文件。 6. 关闭每一个视频源文件、输出视频文件。 下面是一个简单的Python程序示例,实现了多实时视频横向拼接的功能: ```python import cv2 # 读取源视频文件 cap1 = cv2.VideoCapture('input1.mp4') cap2 = cv2.VideoCapture('input2.mp4') frame_count = int(cap1.get(cv2.CAP_PROP_FRAME_COUNT)) frame_width = int(cap1.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(cap1.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 设置输出视频格式、分辨率等参数 out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, (frame_width * 2, frame_height)) # 遍历每一帧图像进行横向拼接 while True: ret1, frame1 = cap1.read() ret2, frame2 = cap2.read() if ret1 and ret2: # 将每一帧图像进行横向拼接 frame_left = frame1[:, :frame_width] frame_right = frame2[:, :frame_width] frame_combine = cv2.hconcat([frame_left, frame_right]) # 将拼接后的图像写入输出视频文件 out.write(frame_combine) # 显示拼接后的图像 cv2.imshow('frame', frame_combine) if cv2.waitKey(1) & 0xFF == ord('q'): break else: break # 关闭源视频文件、输出视频文件 cap1.release() cap2.release() out.release() cv2.destroyAllWindows() ``` 注意事项: 1. 确保源视频文件的分辨率可以被2整除,否则可能会导致拼接视频画面出现问题。 2. 在拼接时,使用cv2.hconcat()函数实现横向拼接。 3. 在输出视频文件时,根据需要选择输出格式、帧率、比特率等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值