前回、画像や動画の重畳を実施してみました。
elsammit-beginnerblg.hatenablog.com
elsammit-beginnerblg.hatenablog.com
今回は動画を縦や横に連結して表示させてみたいと思います!!
と言ってもまずは画像を連携させる方法をまとめてから、組み合わせて動画連結させてみます!!
連結にはOpenCVを用いました。
■環境
・Windows10
・Python3.7.4
■画像の縦連結
画像を縦に連結させるために、
cv2.vconcat([])
を用います。
例えば、こちらのようなコードとなります。
import cv2
import numpy as np
img1 = cv2.imread("lena.jpg")
im_v = cv2.vconcat([img1, img1])
cv2.imshow("test",im_v)
cv2.waitKey(0)
cv2.destroyAllWindows()こちらは同じlena.jpgを縦に並べるコードになります。
実行すると、

といったようになります。
■画像の横連結
画像を横に連結させるためには、
cv2.hconcat([])
を用います。
例えば、こちらのようなコードになります。
import cv2
import numpy as np
img1 = cv2.imread("lena.jpg")
im_h = cv2.hconcat([img1, img1])
cv2.imshow("test",im_h)
cv2.waitKey(0)
cv2.destroyAllWindows()こちらのコードは同じlena.jpgを横に並べるコードになります。
実行すると、

■複数動画の連結
では本題の動画の連結を載せていきます。
と言っても先ほどのhconcat、vconcatをフレーム毎に実行していくのみなります!!
コードはこちらになります。
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
windowsize = (500, 500)
frame = cv2.resize(frame, windowsize)
img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
img_gray = cv2.merge((img_gray, img_gray, img_gray))
ret, img_gray_thresh = cv2.threshold(img_gray, 100, 255, cv2.THRESH_BINARY)
ret, img_gray_thresh2 = cv2.threshold(img_gray, 150, 255, cv2.THRESH_BINARY)
im_h = cv2.hconcat([frame, img_gray])
im_h2 = cv2.hconcat([img_gray_thresh, img_gray_thresh2])
im_merge = cv2.vconcat([im_h, im_h2])
cv2.imshow("test", im_merge)
k = cv2.waitKey(1)
if k == 27:
break
cap.release()
cv2.destroyAllWindows()フレーム毎にhconcatで横に並べたイメージを作成し、
それをvconcatで縦に並べています。
カラー動画、グレースケール動画
閾値100の2値動画、閾値150の2値動画
の
形で並べております。
実行するとこんな感じになります。

■最後に
今回は動画の連結についてまとめてみました。
複数枚の動画を表示するので処理が重くなるのかな?と思いましたが、
CPU使用率が10%そこそこしか上がらなかったのでそこまで大きくなっていない印象でした。
カメラ2台で動かしたらどうなるんだろう??
後で試してみようかな??