您的位置:首页 > 其它

ros下读取kinect彩色图和深度图并显示

2018-01-09 16:30 1671 查看
在ros的学习与开发中,常常会涉及到图像处理相关的知识,ros下可以使用kinect来获取RGB图像和DEPTH图像。使用方法如下(c++):
static const string RGB_WIN = "RGB Image Window";    //定义一个RGB窗口
static const string DEPTH_WIN = "DEPTH Image Window" //定义一个Depeth窗口
cv::Mat rgbimage;
cv::Mat depthimage;

class ImageConverter{
ros::NodeHandle nh_;
image_transport::ImageTransprot it_;
image_transport::Subscriber image_sub_;
image_transport::Subscriber depth_sub_;
public:
IamgeCorverter():it_(nh_){
image_sub_ = it_.subscribe("/camera/rgb/image_color", 1 ,&ImageConverter::imageCb,this);
depth_sub_ = it_.subscribe("/camera/depth_registered/image_raw", 1 , &ImageConverter::depthCb,this);
//初始化显示窗口
cv::nameWindow(RGB_WIN);
cv::nameWindow(DEPTH_WIN);
//指定窗口显示的位置
cv::moveWindow(RGB_WIN,20,20);
cv::moveWindow(DEPTH_WIN,700,20);
}
//rgb图显示的回调函数
void imageCb(const sensor_msgs::ImageConstPrt& msg){
cv_bridge::CvImagePtr cv_ptr;
try{
cv_ptr = cv_bridge::yoCvCopy(msg,sensor_msgs::image_encodings::RGB8);
}
catch(cv_bridge::Exception& e){
ROS_ERROR("cv_bridge 异 常: %s", e.what());
return;
}
cv_ptr->image.copyTo(rgbimage);

//显示
cv::imshow(RGB_WIN,rgbimage);
}
//depth图显示的回调函数
void depthCb(const sensor_msgs::ImageConstPrt& msg){
cv_bridge::CvImagePtr cv_ptr;
try{
cv_ptr = cv_bridge::yoCvCopy(msg,sensor_msgs::image_encodings::TYPE_32FC1);
}
catch(cv_bridge::Exception& e){
ROS_ERROR("cv_bridge 异 常: %s", e.what());
return;
}
cv_ptr->image.copyTo(depthimage);

//显示
cv::imshow(DEPTH_WIN,depthimage);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐