Ask Your Question
0

kinect depth and rgb registration

asked 2015-08-28 21:16:31 -0600

dmngu9 gravatar image

Hi, im able to have rgb point cloud by registration using openni rqt_reconfigure. however, i want to access a pixel in rgb image (camera image_color topic) and find its depth. Which topic should i subscribe depth_registered/image_raw or depth_registered/rect.

I looked at the http://docs.ros.org/api/sensor_msgs/h... . There is no depth in it. How can i access depth value

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
0

answered 2015-08-29 16:55:37 -0600

duck-development gravatar image

The Kinect has the problem that not every pixel have an depth value. So it is not easy the get the depth of an pixel.

edit flag offensive delete link more

Comments

hi, i want to save 1 frame of depth registered image raw but it gives me error when i run image_view and right click to save 1 frame because its not in brg8 format. how can i save a depth map

dmngu9 gravatar imagedmngu9 ( 2015-08-29 19:37:07 -0600 )edit
0

answered 2015-08-31 22:45:48 -0600

Yake gravatar image
        depthsub_ = it_.subscribeCamera(depth_image_topic, 1, &FrameDrawer::depthImageCb, this);

void depthImageCb(const sensor_msgs::ImageConstPtr& image_msg, const sensor_msgs::CameraInfoConstPtr& info_msg)
  {

    cv::Mat image;
    cv_bridge::CvImageConstPtr input_bridge;
    try {
    input_bridge = cv_bridge::toCvCopy(image_msg, sensor_msgs::image_encodings::TYPE_16UC1);// For depth image
//     input_bridge = cv_bridge::toCvCopy(image_msg, sensor_msgs::image_encodings::TYPE_32FC1);// For depth image

      image = input_bridge->image;
    }
    catch (cv_bridge::Exception& ex){
      ROS_ERROR("[draw_frames] Failed to convert image");
      return;
    }
cv::Point3d xyz = cam_model_.projectPixelTo3dRay(pixel_point);  // cv::Point3d ray;
                                                                      //  ray.x = (uv_rect.x - cx() - Tx()) / fx();
                                                                      //  ray.y = (uv_rect.y - cy() - Ty()) / fy();
                                                                      //  ray.z = 1.0;
                                                                      //  return ray;

I have the same question wiht you, even not every pixel has a depth with it , it maybe because the direction of camera or some obstacle before the target. Above is just get the 2d point and the 3d ray, but I don't understand what is the next to get the specific point in 3D

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

2 followers

Stats

Asked: 2015-08-28 21:16:31 -0600

Seen: 941 times

Last updated: Aug 31 '15