
###前提・実現したいこと
こんにちは。
https://github.com/akisato-/pySaliencyMap/blob/master/main_webcam.py
上記のサイトで公開されている、
入力した映像をSaliencyMap化するソースコードに関して質問させていただきます。
以下のエラーが発生し、実行することができません。
おそらく、out.writeは3チャンネルの情報が必要なことから発生するエラーではないかと思います。
どうしたら、正しく動画を実行することができますか?
###発生している問題・エラーメッセージ
OpenCV Error: Assertion failed (img.cols == width && img.rows == height*3) in cv::mjpeg::MotionJpegWriter::write, file D:\Build\OpenCV\opencv-3.3.0\modules\videoio\src\cap_mjpeg_encoder.cpp, line 842 Traceback (most recent call last): File "testsa.py", line 37, in <module> out.write(saliency_map) cv2.error: D:\Build\OpenCV\opencv-3.3.0\modules\videoio\src\cap_mjpeg_encoder.cpp:842: error: (-215) img.cols == width && img.rows == height*3 in function cv::mjpeg::MotionJpegWriter::write
###該当のソースコード
python
1import cv2 2import matplotlib.pyplot as plt 3import pySaliencyMap 4 5t=0 6fourcc = cv2.VideoWriter_fourcc(*'MJPG') 7out = cv2.VideoWriter('output.avi',fourcc, 20.0, (1280,720)) 8 9# main 10if __name__ == '__main__': 11 # set up webcams 12 capture = cv2.VideoCapture('tennis.mp4') 13 # repeat until pressing a key "q" 14 while(True): 15 # capture 16 retval, frame = capture.read() 17 18 if t==183: ##動画の長さ 19 break 20 21 # initialize 22 frame_size = frame.shape 23 frame_width = frame_size[1] 24 frame_height = frame_size[0] 25 sm = pySaliencyMap.pySaliencyMap(frame_width, frame_height) 26 # computation 27 saliency_map = sm.SMGetSM(frame) 28 29 # visualize 30 31 cv2.imshow('Saliency map', cv2.flip(saliency_map, 1)) 32 33 # 追加を試みた文↓ 34 #saliency_map = cv2.merge((saliency_map, saliency_map, saliency_map)) 35 out.write(saliency_map) 36 t = t+1 37 38 if cv2.waitKey(1) & 0xFF == ord('q'): 39 break 40 41 cv2.destroyAllWindows()
###試したこと
saliency_map = cv2.merge((saliency_map, saliency_map, saliency_map))
の文を追加して3チャンネルとした所、実行はしましたが、
保存された動画は以下のように激しく乱れたものでした。
https://youtu.be/-iwhwFfWjbQ
###補足情報(言語/FW/ツール等のバージョンなど)
Python 3.6.1
OpenCV 3.3.0
を使用しております。






回答1件
あなたの回答
tips
プレビュー