子母画面影片
这篇教学会如何使用 OpenCV 读取两个不同来源的影片 ( 例如两个摄影机 ),将两个影片组合成一个“子母画面”的影片。
因为程序中的 OpenCV 会需要使用镜头或 GPU,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda ) ,并安装 OpenCV 函数库 ( 参考:OpenCV 函数库 )。
读取两个不同来源的影片
延伸“读取并播放影片”文章范例,加入第二个影片来源,就可以用不同的视窗,显示不同的影片。
import cv2
cap1 = cv2.VideoCapture(0) # 讀取第一個影片來源
cap2 = cv2.VideoCapture(1) # 讀取第二個影片來源
if not cap1.isOpened():
print("Cannot open camera1")
exit()
if not cap2.isOpened():
print("Cannot open camera2")
exit()
while True:
ret1, img1 = cap1.read() # 讀取第一個來源影片的每一幀
ret2, img2 = cap2.read() # 讀取第一個來源影片的每一幀
cv2.imshow('oxxostudio1', img1) # 如果讀取成功,顯示該幀的畫面
cv2.imshow('oxxostudio2', img2) # 如果讀取成功,顯示該幀的畫面
if cv2.waitKey(1) == ord('q'):
break
cap1.release()
cap2.release()
cv2.destroyAllWindows()
将两部影片合成为子母画面
使用“剪裁图像”的方法,就能将第一个来源的图像,合并到第二个来源图像中的特定位置,搭配“rectangle() 画四边形”,替合成的画面绘制白色外框,最后就成为不错的子母画面影片。
import cv2
cap1 = cv2.VideoCapture(0)
cap2 = cv2.VideoCapture(1)
if not cap1.isOpened():
print("Cannot open camera1")
exit()
if not cap2.isOpened():
print("Cannot open camera2")
exit()
while True:
ret1, img1 = cap1.read()
ret2, img2 = cap2.read()
img1 = cv2.resize(img1,(200,150)) # 縮小尺寸
img2 = cv2.resize(img2,(540,320)) # 縮小尺寸
img2[160:310,330:530] = img1 # 將 img2 的特定區域換成 img1
cv2.rectangle(img2, (330,160), (530,310), (255,255,255), 5) # 繪製子影片的外框
cv2.imshow('oxxostudio', img2)
if cv2.waitKey(1) == ord('q'):
break
cap1.release()
cap2.release()
cv2.destroyAllWindows()
微信扫码关注
抖音扫码关注