lisz-works

プログラミングと興味を貴方に

Python3 OpenCVで画像と動画の表示をする!

【スポンサーリンク】

Python

こんにちわ、lisです!

今回は「OpenCV-Pythonチュートリアル」をもとに作った、画像と動画の表示をするコードです。

画像を表示する

imgPathの画像を表示します。

Sキーを押すと、savePathに画像が保存されます。

import cv2 as cv

def load(path):
    img = cv.imread(path, 0)
    return img

def view(img):
    cv.namedWindow('image', cv.WINDOW_NORMAL)
    cv.imshow('image', img)

def save(path, img):
    cv.imwrite(path, img)

imgPath = './img/image.jpg'
savePath = './img/output.jpg'

img = load(imgPath)
view(img)
key = cv.waitKey(0) & 0xFF
if key == 27:   # ESC
    cv.destroyAllWindows()
elif key == ord('s'):   # s key
    save(savePath, img)
    cv.destroyAllWindows()

基本的な流れ

  1. imread()で画像を読み込む
  2. namedWindow()でウィンドウを作成
  3. imshow()で表示する
  4. destroyAllWindows()で全てのウィンドウを終了する

imshow()の第1引数は、対象のウィンドウ名称なので、namedWindow()の第1引数で指定した文字列と同じものを指定します。

動画を表示する

動画を表示します。

動画が終わるか、Qキーを押すと終了します。

import cv2 as cv

def showFrame(frame):
    cv.imshow('frame', frame)

movPath = './img/video.mp4'
capture = cv.VideoCapture(movPath)
while(capture.isOpened()):
    ret, frame = capture.read()
    if ret == True:
        showFrame(frame)

        key = cv.waitKey(1) & 0xFF
        if key == ord('q'):
            break
    else:
        break

capture.release()
cv.destroyAllWindows()

基本的な流れ

  1. cv.VideoCapture()で動画をキャプチャする
  2. capture.isOpened()でキャプチャが開かれているかチェックする
    1. 開かれている間ループする
  3. capture.read()で動画のフレームを取得する
  4. cv.imshow()で取得したフレームを表示する
  5. capture.release()、cv.destroyAllWindows()で終了する

動画のフレームは画像

動画は1つの映像のようなもの……

と思われておいて、高速なパラパラ漫画みたいなものです。

「パラパラ漫画の1枚分=フレーム」、つまりフレームは画像です。

なので画像表示と同様、cv.imshow()に渡すと画像のように表示されるわけですね。

これが高速に順次「表示!表示!表示!」とされることで、動画が流れてくれます。

参考

コチラを参考にしました。ありがとうございました!

labs.eecs.tottori-u.ac.jp

labs.eecs.tottori-u.ac.jp

opencv.jp

あとがき

Python3のOpenCVで、画像と動画の表示をするコードでした!

やはり目に見えるものを扱っていると、成功するとパッと視覚化されるので楽しいですね!

想像以上に簡単にできるのでサクサク進めていきます!

www.lisz-works.com

www.lisz-works.com