There are at least two ways to use the depth data from the Kinect. First, you mention OpenCV. If you want to use OpenCV with the depth data you would probably want to subscribe to the /camera/depth/image topic, which provides a "depth" image. Each pixel value is the distance measurement in meters (as a 32-bit float). You would probably want to use cv_bridge to convert the ROS topic into an OpenCV cv::Mat -- there is a very good tutorial on cv_bridge. A simple piece of example code could be found in our depth_viewer package, which includes a C++ node that uses cv_bridge and converts the 32-bit float to a nicely scaled 8-bit grayscale image and displays it using OpenCV functions. You can use just about any OpenCV functions on the depth image, and of course segmentation runs fairly easy on a depth image compared to an RGB one.
The other possibility is to use the point cloud representation, on the /camera/depth/points or /camera/rgb/points topic (the latter having RGB data in addition to the standard XYZ data). Rather than using OpenCV, you would want to use the Point Cloud Library, which has many great features and accompanying tutorials.
Originally posted by fergs with karma: 13902 on 2011-05-05
This answer was ACCEPTED on the original site
Post score: 16
Original comments
Comment by kameleon on 2012-10-28:
Hello. I'm working on a project that involves analysis of depth images using OpenCV, and have some problems with conversion into the CV format. I'd like to take a look at your depth_viewer package, but I can't find your repository. Can you give me a link or something where I can download it?
Comment by YUBO.ZUZU on 2013-10-07:
thanks for your kind help!!!
Comment by Consider1001 on 2014-04-15:
Thank you for your answer. May I ask a question that if there is a way to get the value(float) of each point on the depth/image_raw before we convert it in to a cvmat? (Python best)