ROS Image subscriber - 不显示窗口弹出窗口

时间:2015-03-10 11:35:56

标签: opencv camera-calibration ros subscriber

我正在关注官方ROS页面上的图片订阅教程。当我运行my_subscriber时,没有出现窗口弹出窗口。我输入 -

rosrun image_transport_tutorial my_subscriber

输出是 -

init done
opengl support available

然后什么都没发生。 (甚至输出“init done”也是无法解释的,因为my_subscriber.cpp中没有输出行)

我正在关注本教程 - ROS tutorial

我已经在roforent终端中运行了roscore和rosrun image_transport_tutorial my_publisher pathtofile。 我通过运行命令

检查了发布者是否正在发布
rostopic list -v

my_subscriber文件包含以下内容 -

#include <ros/ros.h>
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include <stdio.h>
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
  try
  {
    cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);
  }
  catch (cv_bridge::Exception& e)
  {
    ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str());
  }
}

int main(int argc, char **argv)
{
  std::cout<<"kapil";
  ros::init(argc, argv, "image_listener");
  ros::NodeHandle nh;
  cv::namedWindow("view");
  cv::startWindowThread();
  image_transport::ImageTransport it(nh);
  image_transport::Subscriber sub = it.subscribe("camera/image", 1, imageCallback);
  ros::spin();
  cv::destroyWindow("view");
}

解决:我在其中一个答案中建议的try块中添加了waitKey函数。

cv::waitKey(30);

1 个答案:

答案 0 :(得分:2)

根据对this answer的评论,使用cv::startWindowThread()并不总是有效。也许这就是你的问题。

尝试在cv::waitKey(10)之后添加cv::imshow。这将等待一些按键10毫秒,给窗口时间显示图像。 (这在我看来总是像一个肮脏的黑客,但它是在OpenCV中显示图像的常用方法...)