Ask Your Question

Revision history [back]

Check out the example Python script at the bottom of the tutorial you linked. Notice that both imgmsg_to_cv2 and cv2_to_imgmsg are methods that belong to the cv_bridge.CvBridge class. Your code needs to mimic this structure. First instantiate an instance of cv_bridge.CvBridge, and then call the cv2_to_imgmsg method. Something like:

#!/usr/bin/env python

import rospy
from sensor_msgs.msg import Image
import cv2
import numpy as np
from cv_bridge import CvBridge, CvBridgeError

def webcam_pub():
    pub = rospy.Publisher('webcam/image_raw', Image, queue_size=1)
    rospy.init_node('webcam_pub', anonymous=True)
    rate = rospy.Rate(60) # 60hz

    cam = cv2.VideoCapture(0)
    bridge = CvBridge()

    if not cam.isOpened():
         sys.stdout.write("Webcam is not available")
         return -1

    while not rospy.is_shutdown():
        ret, frame = cam.read()
        msg = bridge.cv2_to_imgmsg(frame, encoding="bgr8")

        if ret:
            rospy.loginfo("Capturing image failed.")

        pub.publish(msg)
        rate.sleep()


if __name__ == '__main__':
    try:
        webcam_pub()
except rospy.ROSInterruptException:
    pass