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

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;
}

  

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

时间: 2024-10-21 01:58:59

ROS订阅两个图像节点的相关文章

ROS 订阅图像节点(1)

博客 http://blog.csdn.net/github_30605157/article/details/50990493 参考ROS原网站 http://wiki.ros.org/image_transport/Tutorials ROS:两个节点同时具有发布和订阅图像信息的功能 http://blog.csdn.net/ding977921830/article/details/70168877

ROS 订阅图像节点

博客 http://blog.csdn.net/github_30605157/article/details/50990493 参考ROS原网站 http://wiki.ros.org/image_transport/Tutorials ROS:两个节点同时具有发布和订阅图像信息的功能 http://blog.csdn.net/ding977921830/article/details/70168877

相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标

关键词:相机位姿估计,单目尺寸测量,环境探知 用途:基于相机的环境测量,SLAM,单目尺寸测量 文章类型:原理说明.Demo展示 @Author:VShawn @Date:2016-11-28 @Lab: [email protected] 目录 <相机位姿估计0:基本原理之如何解PNP问题> <相机位姿估计1:根据四个特征点估计相机姿态> <相机位姿估计1_1:OpenCV:solvePnP二次封装与性能测试> <相机位姿估计2:[应用]实时位姿估计与三维重建相

二叉树——查找两个任意节点的最近祖先

很久没有用过二叉树了,最近由于需要用到了,发现很多知识需要巩固了,中间涉及到一个算法就是找任意两个节点的最近祖先.通过本人回顾和演算,最终提出了下面一个方法,网上也有很多其他的方式实现,再次仅对自己好几个小时的工作作个记录和积累吧! 程序是用C语言写的,个人觉得如果用C#实现会更加方便. 首先是数据结构定义: [cpp] view plaincopyprint? typedef char TElemType; typedef bool Status; typedef struct BiTNode

计算两幅图像的重叠区域

http://www.cnblogs.com/dwdxdy/p/3232331.html 随笔- 87  文章- 0  评论- 81 [OpenCV学习]计算两幅图像的重叠区域 问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域. 算法思想: 若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图,因而可以转换成图像匹配问题. 图像匹配问题,可以融合两幅图像,得到全景图,但无法标识出在原图像的重叠区域. 将两幅图像都

大家来找茬 两幅图像相减 其它好的实现? 美女找茬

http://blog.csdn.net/merlin_q/article/details/7024798 大家来找茬 两幅图像相减 其它好的实现? 标签: imageinclude 2011-11-29 20:29 4701人阅读 评论(2) 收藏 举报  分类: Opencv学习(16)  C++(18)  版权声明:本文为博主原创文章,未经博主允许不得转载. #include <opencv2/core/core.hpp>#include <opencv2/highgui/high

【OpenCV学习】计算两幅图像的重叠区域

问题描述:已知两幅图像Image1和Image2,计算出两幅图像的重叠区域,并在Image1和Image2标识出重叠区域. 算法思想: 若两幅图像存在重叠区域,则进行图像匹配后,会得到一张完整的全景图,因而可以转换成图像匹配问题. 图像匹配问题,可以融合两幅图像,得到全景图,但无法标识出在原图像的重叠区域. 将两幅图像都理解为多边形,则其重叠区域的计算,相当于求多边形的交集. 通过多边形求交,获取重叠区域的点集,然后利用单应矩阵还原在原始图像的点集信息,从而标识出重叠区域. 算法步骤: 1.图像

比较两个XML节点编号---轻开平台(原WebEasy)字符串计算5

比较两个XML节点编号: @{subNode:n0.x.x(n0.x.x)}--返回比较结果 样例: @{subNode:c0.0(c0.0)} 返回0,表示是同一个节点 @{subNode:c0.0(c0.0.1)} 返回-1,表示是父节点 @{subNode:c0.0.1(c0.0)} 返回1,表示是子节点 @{subNode:c0.1.0(c0.0.1)} 返回differ(不同),表示没有关系 轻松准确在判断两个xml节点的上下层关系 轻松互联网开发平台(Easy Do IT)资源下载

衡量两幅图像相似度的指标SNR(signal to noise ratio)和PSNR(peak signal to noise ratio)SSIM(structural similarity in

官方网站:https://ece.uwaterloo.ca/~z70wang/research/ssim/ 1.SSIM structural similarity index 一种衡量两幅图像相似度的新指标,其值越大越好,最大为1, 经常用到图像处理中,特别在图像去噪处理中在图像相似度评价上全面超越SNR(signal to noise ratio)和PSNR(peak signal to noise ratio). 具体原理见 Z. Wang, A. C. Bovik, H. R. Shei