在使用华为hi lens kit 设备时,由于只有一个HDMI输出口,所以需要将多路视频或者结果进行合并,形成一路视频显示在HDMI上。
做法思路是将多路视频读取过来,然后进行颜色转换,图像大小转换,比如进行4路显示,就将图像的横纵坐标都缩小一倍;若要左右2路显示,则只需要缩小宽度一倍。然后进行堆叠即可,如横向堆叠,纵向堆叠。
#将多路视频合并为1路
import hilens
import cv2
import numpy as np
# 调整图像大小
net_h = 360
net_w = 640
# 预处理:缩放尺寸
def preprocess(img_data):
new_image = cv2.resize(img_data, (net_w, net_h))
return new_image
def run():
# 构造摄像头
cap1 = hilens.VideoCapture()
cap2 = hilens.VideoCapture("rtsp://.../101")
cap3 = hilens.VideoCapture("rtsp://.../101")
cap4 = hilens.VideoCapture("rtsp://.../101")
disp = hilens.Display(hilens.HDMI)
while True:
# 获取一帧画面
frame1 = cap1.read()
frame2 = cap2.read()
frame3 = cap3.read()
frame4 = cap4.read()
frame1_resize = preprocess(frame1)
frame2_resize = preprocess(frame2)
frame3_resize = preprocess(frame3)
frame4_resize = preprocess(frame4)
# 使用opencv进行颜色转换
bgr1 = cv2.cvtColor(frame1_resize, cv2.COLOR_YUV2BGR_NV21)
bgr2 = cv2.cvtColor(frame2_resize, cv2.COLOR_YUV2BGR_NV21)
bgr3 = cv2.cvtColor(frame3_resize, cv2.COLOR_YUV2BGR_NV21)
bgr4 = cv2.cvtColor(frame4_resize, cv2.COLOR_YUV2BGR_NV21)
frameUp = np.hstack((bgr1, bgr2))#在水平方向上堆叠
frameDown = np.hstack((bgr3, bgr4))
frame = np.vstack((frameUp, frameDown))#在垂直方向上堆叠
# 使用hilens进行颜色转换
nv21 = hilens.cvt_color(frame, hilens.BGR2YUV_NV21)
#输出到HDMI
disp.show(nv21)
if __name__ == '__main__':
#参数【hello】要与基本信息的【检验值】一致。详情请查看开发指南
hilens.init("hello")
run()
hilens.terminate()
[参考文章](https://blog.csdn.net/kingroc/article/details/86309079)