On 05/20/2010 04:09 AM, Chriss Lei wrote: > Hello. > > I'm subscribing to three topics and trying to extract image part of > DisparityImageConstPtr message and convert it to IplImage. > > Here's the callback function I'm using. > > void callback(const sensor_msgs::CameraInfo::ConstPtr& info, > const sensor_msgs::ImageConstPtr& left, > const stereo_msgs::DisparityImageConstPtr& disparity_msg) > { > K_intrinsic[0] = info->K[0]; > ROS_INFO("fx [%f]", K_intrinsic[0]); > > cerr << "f: " << disparity_msg->f << " , T: " << > disparity_msg->T << endl; > > IplImage* im_left = bridge[1].imgMsgToCv(left, "passthrough"); > > //const sensor_msgs::Image& disp = (disparity_msg->image); > //const sensor_msgs::ImageConstPtr& dispPtr = disp; > > IplImage* dispImg = bridge[2].imgMsgToCv(disparity_msg->image, > "passthrough"); > > cvShowImage("left", im_left); > > } > > Subscribing works fine (I can see the rectified image displayed) but > I'm having a difficult time extracting the image member of the > DisparityImageConstPtr message. > > I have to following error: > > /home/lei/ros/stacks/poseEstimation/src/vizDepthMap.cpp:79: error: no > matching function for call to ‘sensor_msgs::CvBridge::imgMsgToCv(const > sensor_msgs::Image&, const char [12])’ > /home/lei/ros/stacks/vision_opencv/cv_bridge/include/cv_bridge/CvBridge.h:424: > note: candidates are: IplImage* > sensor_msgs::CvBridge::imgMsgToCv(boost::shared_ptr sensor_msgs::Image>, std::string) > > > It seems like there's an error from cvbridge expecting ImageConstPtr > as input but I'm supplying Image type. > > Is there a way to extract and convert the disparity image from the > DisparityImageConstPtr message? It looks to me, you should just replace: IplImage* dispImg = bridge[2].imgMsgToCv(disparity_msg->image, "passthrough"); with IplImage* dispImg = bridge[2].imgMsgToCv(&(disparity_msg->image), "passthrough"); and let boost::shared_ptr do its magic. Or, is there something more subtle I just missed? -- Cedric - http://www.asl.ethz.ch/people/cedricp - http://www.skybotix.com