版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zlyaxixuexi/article/details/79014417
在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);
}