Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

カラー動画とグレースケール動画の連結

前回、画像や動画の重畳を実施してみました。
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を縦に並べるコードになります。
実行すると、
f:id:Elsammit:20201119222300p:plain
といったようになります。

■画像の横連結

画像を横に連結させるためには、

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を横に並べるコードになります。
実行すると、
f:id:Elsammit:20201119222835p:plain

■複数動画の連結

では本題の動画の連結を載せていきます。
と言っても先ほどの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値動画

形で並べております。

実行するとこんな感じになります。
f:id:Elsammit:20201119224119g:plain

■最後に

今回は動画の連結についてまとめてみました。
複数枚の動画を表示するので処理が重くなるのかな?と思いましたが、
CPU使用率が10%そこそこしか上がらなかったのでそこまで大きくなっていない印象でした。

カメラ2台で動かしたらどうなるんだろう??
後で試してみようかな??