2017-03-06 14 views
0

私はUbuntuのKinectで取得したビデオファイルにリアルタイムの画像を書き込もうとしています。PythonでOpenCVを使用してビデオを書き込むことができません

#!/usr/bin/env python 
import roslib 
roslib.load_manifest('ros_package_name') 
import rospy 
import cv2 
from sensor_msgs.msg import Image 
from cv_bridge import CvBridge, CvBridgeError 

class image_converter(object): 
    def __init__(self, topic_name, file_name, fps=20): 
     self.fps = fps 
     self.file_name = file_name 
     self.bridge = CvBridge() 
     self.image_sub = rospy.Subscriber(topic_name, Image, self.callback) 
     self.video_writer = None 

    def callback(self,data): 
     try: 
      cv_image = self.bridge.imgmsg_to_cv2(data, 'bgr8') 
     except CvBridgeError as e: 
      print e 

     if self.video_writer is None: 
      rows, cols, _ = cv_image.shape 
      self.video_writer = cv2.VideoWriter(self.file_name, -1, self.fps, (cols, rows)) 

     self.video_writer.write(cv_image) 

    def clean_shutdown(self): 
     if self.video_writer is not None: 
      self.video_writer.release() 
     print 'Saving video file', self.file_name 

    def __del__(self): 
     self.clean_shutdown() 

def main(): 
    ic = image_converter('/kinect2/qhd/image_color_rect','video.avi') 
    rospy.init_node('save_video', anonymous=True) 
    rospy.on_shutdown(ic.clean_shutdown) 
    rospy.spin() 

コードはスムーズに動作し、端末にエラーを表示しません。しかし、私がctrl+cを使用して終了した場合でも、ビデオファイルは生成されません。

答えて

1

ビデオを保存するためのコーデックを使用します。モーションJpegはほとんど常に動作します!

fourcc = cv2.VideoWriter_fourcc(*'MJPG') 
self.video_writer = cv2.VideoWriter(file_name, fourcc, fps, frame_size) 

次に残りのストーリー。

+0

残念ながら、 'FOURCC = cv2.VideoWriter_fourcc(* 'MJPG')'エラー以下thowringさを追加: 'はAttributeError: 'モジュール' オブジェクトが「何の属性を持っていないVideoWriter_fourcc'' が 私は、追加のモジュールをインストールする必要がありますか? –

+1

すばらしいGoogle検索が私を助けました。私は 'fourcc = cv2.cv.CV_FOURCC(* 'MJPG')'を使っていて、それは魅力的なように働いています。どうもありがとう。 –

関連する問題