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

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

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

4040閲覧

動画再生後,必ずエラーが発生します

yu340102

総合スコア29

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/05/31 10:17

動画を扱う OpenCV-Pythonチュートリアル

Python

1# -*- coding: utf-8 -*- 2import numpy as np 3import cv2 4 5cap = cv2.VideoCapture('vtest.avi') 6 7while(cap.isOpened()): 8 ret, frame = cap.read() 9 10 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 11 12 cv2.imshow('frame',gray) 13 if cv2.waitKey(25) & 0xFF == ord('q'): 14 break 15 16cap.release() 17cv2.destroyAllWindows()

以上のサンプルを実行すると,必ず以下のようなエラーが出ます.

runfile('C:/Users/yuuro/Documents/Python Projects 2018/Main/sample.py', wdir='C:/Users/yuuro/Documents/Python Projects 2018/Main')

Traceback (most recent call last):

File "<ipython-input-1-dacda80d850f>", line 1, in <module>

runfile('C:/Users/yuuro/Documents/Python Projects 2018/Main/sample.py', wdir='C:/Users/yuuro/Documents/Python Projects 2018/Main')

File "C:\Users\yuuro\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile

execfile(filename, namespace)

File "C:\Users\yuuro\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile

exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/yuuro/Documents/Python Projects 2018/Main/sample.py", line 10, in <module>

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

error: OpenCV(3.4.1) C:\bld\opencv_1520732670222\work\opencv-3.4.1\modules\imgproc\src\color.cpp:11147: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor

cap.isOpened()がFalseの場合,すなわち動画の最終フレームを表示した後の場合は,ループ処理しないと思っていました.
なので,どうしてこのようなエラーが出て,応答が停止するのか分かりません.

動画再生後,
cap.release()
cv2.destroyAllWindows()
にたどり着くためにはどう解決すればよいでしょうか?

ご意見いただけると幸いです.

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

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

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

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

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

guest

回答1

0

ベストアンサー

retの値がFalseであるときに脱出すれば良いです。

Python

1ret, frame = cap.read() 2if not ret: 3 break

isOpenedはおそらく、『開くのに成功したかどうか』を指します。

######isOpened()

Returns true if video capturing has been initialized already.
If the previous call to VideoCapture constructor or VideoCapture::open() succeeded, the method returns true.

引用元: cv::VideoCapture Class Reference - isOpened()
サンプルコードが不適切ってことになるんですかねぇ...

書くなら

私なら、こんな感じで書きます。

Python

1import numpy as np 2import cv2 3 4cap = cv2.VideoCapture(ファイル名) 5assert cap.isOpened(), 'Failed to open video file.' 6 7ret, frame = cap.read() 8while ret: 9 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 10 11 cv2.imshow('frame', gray) 12 if cv2.waitKey(1) & 0xFF == ord('q'): 13 break 14 15 ret, frame = cap.read() 16else: 17 print('Finish to play video.') 18 19cap.release() 20cv2.destroyAllWindows()

再生を 中断したとき/完遂したとき で異なった処理が出来るようにしてみました。
また、ファイルのオープンに失敗したときは早めに例外を投げるようにしています。

投稿2018/05/31 10:34

編集2018/05/31 10:46
LouiS0616

総合スコア35660

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

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

yu340102

2018/05/31 10:43

丁寧なご回答ありがとうございます. retの値がFalseであるときに脱出するように変更したら解決しました. そういうことになりますね... retは, frameにデータが入っていたらTrue, frameにデータが入っていたらFalse, という認識でよろしいでしょうか?
LouiS0616

2018/05/31 10:47

> retは,... という認識でよろしいでしょうか? 問題ないです。
yu340102

2018/05/31 10:52

追記とコメントへの返信ありがとうございます. 大変参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問