2017-03-06 45 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

使用編碼解碼器保存視頻。 Motion 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

快速谷歌搜索幫助我。我正在使用'fourcc = cv2.cv.CV_FOURCC(*'MJPG')',它像一個魅力。非常感謝。 –