質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2200閲覧

グレースケールで動画を読み込めません。どなたかご教授ください。

so-syaru

総合スコア1

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/17 07:48

前提・実現したいこと

グレースケールで動画を読み取って差分を求めるプログラムを書いたのですが,差分の配列は表示されるのにエラーをはいていて解決できません。プログラム素人なのでご教授お願いいたします。

発生している問題・エラーメッセージ

エラーメッセージ ```error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor' ### 該当のソースコード ```ここに言語名を入力 ソースコード ```import cv2 import numpy as np import time i = 0 # カウント変数 th = 30 # 差分画像の閾値 # 動画ファイルのキャプチャ cap = cv2.VideoCapture('outtest.m4v') # 最初のフレームを背景画像に設定 ret, bg = cap.read() # グレースケール変換 bg = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY) while (cap.isOpened()): # フレームの取得 ret, frame = cap.read() # グレースケール変換 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 差分の絶対値を計算 mask = cv2.absdiff(gray, bg) # 差分画像を二値化してマスク画像(モノクロ)を算出 mask[mask < th] = 0 mask[mask >= th] = 255 # フレーム画像を表示(モノクロ) cv2.imshow("Flame", gray) # 背景画像を表示(モノクロ) cv2.imshow("Background", bg) # 待機(0.03sec) time.sleep(0.03) i += 1 # カウントを1増やす # 背景画像の更新(一定間隔) if(i > 30): ret, bg = cap.read() bg = cv2.cvtColor(bg, cv2.COLOR_BGR2GRAY) i = 0 # カウント変数の初期化 print(gray, bg) # xキーが押されたら途中終了 if cv2.waitKey(1) & 0xFF == ord('x'): break cap.release() cv2.destroyAllWindows() ### 試したこと 調べるとファイルの中に日本語などがあるとこのようなエラーをはくと書いてあったので日本語の部分を消したのですが一向に治る気配がありません ### 補足情報(FW/ツールのバージョンなど) python4.3.0を使用、opencvを使用、環境はwindows10です、スパイダーを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

動画の読み込み、最後まで再生、差分計算はできているという理解で良いでしょうか。
最後のフレームまで読み込んだあともreadしているので、もうデータがありませんよ(src_empty)となっていると思います。
ret, bg = cap.read()のretで判定して、末尾まで行ったらbreakで抜けるか、次に読み込むフレーム位置を始めに戻す処理が必要です。

python

1ret, bg = cap.read() 2if !ref: 3 break

or

python

1ret, bg = cap.read() 2if !ref: 3 cap.set(cv2.CAP_PROP_POS_FRAMES, 0)

投稿2020/09/17 14:14

watta

総合スコア68

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

so-syaru

2020/09/18 04:44

ありがとうございます!無事解決いたしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問