使用ROS进行图片传输

版本控制:QT5.9.5   ROS-melodic  Ubuntu18.04

前置工作:

对QT的配置文件进行修改,使其在启动时导入ros库的内容。

首先,打开终端,在终端输入指令,进入文件进行编辑。

sudo gedit /usr/share/applications/QtProject-qtcreator-ros-latest.desktop

打开后文件:

使用ROS进行图片传输_第1张图片

在Exec = 后加入bash -i -c ,改为

Exec=bash -i -c /home/QtCreator/latest/bin/qtcreator-ros

之后导入opencv库和ros库正常进行程序编写即可。

#include 
#include 
#include 

ROS通信主要通过sensor_msgs类型来发送图片内容,并通过opencv库中的imshow函数来进行图像的展示。

在发布过程中,首先通过opencv库读取指定路径图片信息,存储为cv::Mat格式,之后通过cv_bridge来对图片信息进行转换,将其转换为ros的消息类型。

  ros::init(argc, argv, "image_publisher");
  ros::NodeHandle nh;

  image_transport::ImageTransport it(nh);
  image_transport::Publisher pub = it.advertise("camera/image", 1); // publish topic

  cv::Mat image = cv::imread("/home/qtros/test/img/img.png");
//  cv::imshow("demo",image);
  sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg(); 

注意,与通常消息的发布者不同的是,图片发布需要在生成节点后,根据节点生成ImageTransport类型的对象,将发布者挂载到ImageTransport类型的对象上面。

常见问题:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/highgui/src/window.cpp, line 304
terminate called after throwing an instance of ‘cv::Exception’
what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/highgui/src/window.cpp:304: error: (-215) size.width>0 && size.height>0 in function imshow

建议通过终端输入pwd指令,确认自己输入的绝对路径是否正确。

你可能感兴趣的:(QT+ROS项目,linux)