ROS使用opencv cv::imshow闪退问题

我在ros-indigo环境下,运行opencv来得到realsense r200的图像。

源码是直接使用的ros下cv_bridge的包的教程:如下


#include //ros标准库头文件
#include //C++标准输入输出库
/*
  cv_bridge中包含CvBridge库
*/
#include
/*
  ROS图象类型的编码函数
*/
#include
/*
   image_transport 头文件用来在ROS系统中的话题上发布和订阅图象消息
*/
#include

//OpenCV2标准头文件
#include
#include
#include

static const std::string OPENCV_WINDOW = "Image window";
class ImageConverter
  {
     ros::NodeHandle nh_;
     image_transport::ImageTransport it_;
     image_transport::Subscriber image_sub_;
     image_transport::Publisher image_pub_;

   public:
     ImageConverter()
       : it_(nh_)
     {
       // Subscrive to input video feed and publish output video feed
       image_sub_ = it_.subscribe("/camera/color/image_raw", 1,
         &ImageConverter::imageCb, this);


       cv::namedWindow(OPENCV_WINDOW);
     }

     ~ImageConverter()
     {
       cv::destroyWindow(OPENCV_WINDOW);
     }

     void imageCb(const sensor_msgs::ImageConstPtr& msg)
     {
       cv_bridge::CvImagePtr cv_ptr;
       try
       {
         cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
       }
       catch (cv_bridge::Exception& e)
       {
         ROS_ERROR("cv_bridge exception: %s", e.what());
         return;
       }
       //ROS_INFO("%d",cv_ptr->image.cols);

       //ROS_INFO("%d",cv_ptr->image.rows);
       // Draw an example circle on the video stream


       // Update GUI Window
       cv::imshow(OPENCV_WINDOW, cv_ptr->image);
       cv::waitKey(50);

       // Output modified video stream

     }
   };

   int main(int argc, char** argv)
   {
     ros::init(argc, argv, "realcam_dyn_node");
     ImageConverter ic;
     ros::spin();
     return 0;
   }

编译通过之后,一运行就崩溃,显示segment core崩溃。我注释掉cv::imshow那行代码后可以运行。

在调试了n多次都未果后,我发现了可能是opencv版本的问题。我的ros是直接安装的完整的桌面版,ros-indigo下的cv_bridge依赖与opencv的2.4.8的包,而我的opencv是3.1版本的,编译的时候会有waining:libopencv_core.so.2.4, needed by /opt/ros/indigo/libcv_bridge, may conflict with libopencv_core.so.3.1


解决方法就是升级cv_bridge:

先卸载原版本的cv_bridge

sudo apt-get remove ros-indigo-cv-bridge


然后去https://github.com/ros-perception/vision_opencv/tree/indigo/cv_bridge

这个网址下载cv_bridge包,注意分支选择indigo。


下载完之后将cv_bridge包解压到catkin_ws/src目录下

之后,

cd ~/catkin_ws

catkin_make --pkg cv_bridge


然后重新编译原程序,运行,完美~


你可能感兴趣的:(ROS使用opencv cv::imshow闪退问题)