Python OpenCV ndarray型のimageのVideoWriterへの書き込み
カメラから取得した動画をAVIとして保存する機能を作成しております。
産業用カメラのuEyeカメラから流れてきた画像をOpenCVのVideoWriterに保存する事を考えており、以下のサンプルコードを元に作成しております。
https://github.com/dcabecinhas/pyueye
現在、カメラから取得したデータをGUIで表示する部分は動いておりますが、AVIへの書き込みが上手く行えておりません。
発生している問題・エラーメッセージ
.writeをする時に上手く保存できていない。
以下に似たようなエラーを報告している方がおり、入力された画像のサイズなどがVideoWriterと違うと保存されない事がわかりました。
https://teratail.com/questions/63352
その後も画像のサイズや型を色々変えてやってみたのですが上手くいきませんでした。
該当のソースコード
元となるコードのmain.pyのprocess_imageの所でAVI化を行っております。
Python
1#!/usr/bin/env python 2# Copyright省略 3 4from pyueye_example_camera import Camera 5from pyueye_example_utils import FrameThread 6from pyueye_example_gui import PyuEyeQtApp, PyuEyeQtView 7from PyQt4 import QtGui 8 9from pyueye import ueye 10 11import cv2 12import numpy as np 13import datetime 14import os 15 16size_width = 1280 17size_height = 1024 18fps = 30.0 19codec = "DIVX" 20aviname = "output.avi" 21avi = cv2.VideoWriter() 22 23def init_avi(): 24 print("init") 25 aviname = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S.avi") 26 fourcc = cv2.cv.CV_FOURCC(*codec) 27 avi = cv2.VideoWriter(aviname, fourcc, fps, (size_width, size_height)) 28 29def done_avi(): 30 print("done") 31 avi.release() 32 cv2.destroyAllWindows() 33 34def process_image(self, image_data): 35 print("process") 36 # reshape the image data as 1dimensional array 37 image = image_data.as_1d_image() 38 print(type(image_data)) // <type 'instance'> 39 print(type(image)) // <type 'numpy.ndarray'> 40 41 qtgui = QtGui.QImage(image.data, 42 image_data.mem_info.width, 43 image_data.mem_info.height, 44 QtGui.QImage.Format_RGB888) 45 avi.write(cv2.resize(image, (size_width,size_height))) 46 47 # show the image with Qt 48 return qtgui 49 50def main(): 51 # we :wneed a QApplication, that runs our QT Gui Framework 52 app = PyuEyeQtApp() 53 54 init_avi() 55 56 # a basic qt window 57 view = PyuEyeQtView() 58 view.show() 59 view.user_callback = process_image 60 61 # camera class to simplify uEye API access 62 cam = Camera() 63 cam.init() 64 cam.set_colormode(ueye.IS_CM_BGR8_PACKED) 65 cam.set_aoi(0,0, size_width, size_height) 66 cam.alloc() 67 cam.capture_video() 68 69 # a thread that waits for new images and processes all connected views 70 thread = FrameThread(cam, view) 71 thread.start() 72 73 # cleanup 74 print("clean up") 75 app.exit_connect(thread.stop) 76 app.exec_() 77 78 print("thread") 79 thread.stop() 80 thread.join() 81 82 print("cam") 83 cam.stop_video() 84 cam.exit() 85 86 done_avi() 87 88if __name__ == "__main__": 89 main()
補足情報
OS: Ubuntu 16.04.5 LTS
Python: Python 2.7.12
OpenCV: 2.4.9.1
カメラ: USB 3 uEye CP Rev. 2
#####どうぞよろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/12 04:26
2018/10/12 04:33 編集
2018/10/12 04:52
2018/10/12 04:58
2018/10/12 05:07
2018/10/12 05:22
2018/10/12 05:35