docs: def images(cam):
      """Extract images from input stream to jpg files.
  
      Args:
          cam: Input stream of raw rosbag messages.
  
      Returns:
          File instances for images of input stream.
      """
      # Set output stream title and pull first message
      yield marv.set_header(title=cam.topic)
  
      # Fetch and process first 20 image messages
      name_template = '%s-{}.jpg' % cam.topic.replace('/', ':')[1:]
      while True:
          idx, msg = yield marv.pull(cam, enumerate=True)
          if msg is None or idx >= 20:
              break
  
          # Deserialize raw ros message
          pytype = get_message_type(cam)
          rosmsg = pytype()
          rosmsg.deserialize(msg.data)
  
          # Write image to jpeg and push it to output stream
          img = imgmsg_to_cv2(rosmsg, "rgb8")
          name = name_template.format(idx)
          imgfile = yield marv.make_file(name)
          cv2.imwrite(imgfile.path, img)
          yield marv.push(imgfile)