码迷,mamicode.com
首页 > 其他好文 > 详细

ROS订阅两个图像节点

时间:2018-03-23 16:20:47      阅读:632      评论:0      收藏:0      [点我收藏+]

标签:pre   continue   gui   lin   print   printf   return   ini   transport   

双目相机左右视图获取

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include <sstream> // for converting the command line parameter to integer

char command;
cv::Mat left,right;

void imageCallbackLeft(const sensor_msgs::ImageConstPtr &msg)
{
   try
   {
       left = cv_bridge::toCvShare(msg,"bgr8")->image;
       cv::imshow("left",left );
       command=cv::waitKey(1);
       if(command == ‘ ‘)
       {
	 cv::imwrite("left.jpg",left);
         cv::imwrite("right.jpg",right);
       }
   }
   catch(cv_bridge::Exception &e)
   {
    
   }
}

void imageCallbackRight(const sensor_msgs::ImageConstPtr &msg)
{
   try
   {
       right =  cv_bridge::toCvShare(msg,"bgr8")->image;
       cv::imshow("right",right);
       //cv::waitKey(1);
   }
   catch(cv_bridge::Exception &e)
   {
    
   }
}

int main(int argc, char** argv)
{

  ros::init(argc, argv, "video_publish");
  ros::NodeHandle nh("~");
  image_transport::ImageTransport it(nh);
  image_transport::Subscriber sub_left = it.subscribe("/left/image_rect_color", 1,imageCallbackLeft);
  image_transport::Subscriber sub_right = it.subscribe("/right/image_rect_color", 1,imageCallbackRight);

 ros::spin();

     
}

  

ROS发布图像

#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include <sstream> // for converting the command line parameter to integer

int main(int argc, char** argv)
{

  ros::init(argc, argv, "video_publish");
  ros::NodeHandle nh("~");
  image_transport::ImageTransport it(nh);
  image_transport::Publisher pub = it.advertise("/usb_cam/image_raw", 1);

  std::string device_name;
  //nh.param<std::string>("device_name",device_name,"");

 // nh.param<std::string>( "device_name", device_name, device_name );
    //std::cout << "device_name = "<< device_name  << std::endl;
  cv::VideoCapture cap(0);
  // Check if video device can be opened with the given index
  //cap.set(CV_CAP_PROP_FRAME_WIDTH,1280);
  //cap.set(CV_CAP_PROP_FRAME_HEIGHT,720);
  
if(!cap.isOpened())
  {
    std::cout << "can‘t open video stream..." << std::endl;
     return 1;
  }
  cv::Mat frame;
  sensor_msgs::ImagePtr msg;

  ros::Rate loop_rate(25);


  
  //cv::namedWindow("src",0);
  //cv::resizeWindow("src",640,480);

  int count = 0;
  char frame_count[256];

  while (nh.ok()) {
    cap >> frame;

    resize(frame,frame,cv::Size(1280,720));
    // Check if grabbed frame is actually full with some content
    if(!frame.data) {
     cap.open(device_name);
     continue;
     //break;
    }
    msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", frame).toImageMsg();
    pub.publish(msg);

    //sprintf(frame_count,"frame # %d",count++);
   // cv::putText(frame,frame_count,cv::Point(20,20),cv::FONT_HERSHEY_SIMPLEX,1,cv::Scalar(255,0,255),4,8);
    cv::imshow("src",frame);
    cv::waitKey(1);
    
    ros::spinOnce();
    loop_rate.sleep();
  }
   cv::destroyAllWindows();
   pub.shutdown();
   return 0;
}

  

 

ROS订阅两个图像节点

标签:pre   continue   gui   lin   print   printf   return   ini   transport   

原文地址:https://www.cnblogs.com/kekeoutlook/p/8630545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!