How to save all frames of an image topic

asked 2022-08-02 12:53:54 -0500

farhad-bat gravatar image

Hi,

I have two 4K cameras that output 30 fps. When I use rosbag record -a, I noticed, It just saves a few images, for example, two images per second.

I wrote a code to subscribe to topics and save their images as follows; however, it saves one image from each several images. Even the gap between two consecutive images reaches 15 frames sometimes.

``` def catch_left_stere_message(image_message):

global left_yaml 

# left camera raw image publisher
global left_raw_image_pub

# left camera image info publisher
global left_camera_info_pub

# create camera info message
camera_info = CameraInfo()
camera_info.header = image_message.header
camera_info.height = image_message.height
camera_info.width = image_message.width
camera_info.distortion_model = left_yaml['distortion_model']
if camera_info.distortion_model == 'plumb_bob':
    camera_info.D = left_yaml['distortion_coefficients']['data']
else:
    raise ValueError('Unkown camera distortion type.')
camera_info.K = left_yaml['camera_matrix']['data']
camera_info.R = left_yaml['rectification_matrix']['data']
camera_info.P = left_yaml['projection_matrix']['data']
camera_info.binning_x = 1
camera_info.binning_y = 1
camera_info.roi = RegionOfInterest()
camera_info.roi.x_offset = 0
camera_info.roi.y_offset = 0
camera_info.roi.height = 0
camera_info.roi.width = 0
camera_info.roi.do_rectify = False

# publish left image info
left_camera_info_pub.publish(camera_info)

# publish left image
left_raw_image_pub.publish(image_message)

print("left -{}-{}.jpeg".format(image_message.header.seq, image_message.header.stamp))

img_num_rows = image_message.height
img_num_cols = image_message.width

## convert sensor msg/image to image 
img = np.frombuffer(image_message.data, dtype=np.uint8).reshape(img_num_rows, img_num_cols, -1).copy()

if image_message.encoding == "bayer_rggb8":
   img = cv2.cvtColor(img, cv2.COLOR_BayerBG2RGB)

im = PIL.Image.fromarray(img)
im.save("left-{}-{}.jpeg".format(image_message.header.seq, image_message.header.stamp))

```

edit retag flag offensive close merge delete