前提・実現したいこと
フレーム間差分を行おうとしていたら,while文内でフレームを更新しようとcvtColor関数でフレームをグレイスケールにしようとした際に以下のようなエラーが出ました.
こちらのエラーの解決方法を教えていただきたいです.よろしくお願いいたします.
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-1-6c4502620fce> in <module> 48 frame1 = frame2 49 frame2 = frame3 ---> 50 frame3 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) 51 52 # 待機(0.03sec) error: OpenCV(3.4.5) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
該当のソースコード
# -*- coding: utf-8 -*- import cv2 import numpy as np import time # フレーム差分の計算 def frame_sub(img1, img2, img3, th): # フレームの絶対差分 diff1 = cv2.absdiff(img1, img2) diff2 = cv2.absdiff(img2, img3) # 2つの差分画像の論理積 diff = cv2.bitwise_and(diff1, diff2) # 二値化処理 diff[diff < th] = 0 diff[diff >= th] = 255 # メディアンフィルタ処理(ゴマ塩ノイズ除去) mask = cv2.medianBlur(diff, 3) return mask # 動画ファイルのキャプチャ cap = cv2.VideoCapture("D:/github/sample/python/opencv/video/test2.avi") width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # フレームを3枚取得してグレースケール変換 frame1 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) frame2 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) frame3 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) while(cap.isOpened()): # フレーム間差分を計算 mask = frame_sub(frame1, frame2, frame3, th=30) # 結果を表示 frame22 = cv2.resize(frame2 , (int(width*0.5), int(height*0.5))) cv2.imshow("Frame2", frame22) cv2.moveWindow('Frame2', 0, 0) mask22 = cv2.resize(mask , (int(width*0.5), int(height*0.5))) cv2.imshow("Mask", mask22) cv2.moveWindow('Mask', 200,0 ) # 3枚のフレームを更新 frame1 = frame2 frame2 = frame3 frame3 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) # 待機(0.03sec) time.sleep(0.03) # qキーが押されたら途中終了 if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
試したこと
エラーについて調べましたが,パスに間違いがある・日本語が含まれる問題は,cap.read()で読み込んだフレームをそのままcvtColorに入れているので,問題ないと思っています.
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/29 01:12
2020/09/29 01:29
2020/09/29 02:33
2020/09/29 03:00 編集
2020/09/29 03:03