赞
踩
版本控制:QT5.9.5 ROS-melodic Ubuntu18.04
前置工作:
对QT的配置文件进行修改,使其在启动时导入ros库的内容。
首先,打开终端,在终端输入指令,进入文件进行编辑。
sudo gedit /usr/share/applications/QtProject-qtcreator-ros-latest.desktop
打开后文件:
在Exec = 后加入bash -i -c ,改为
Exec=bash -i -c /home/QtCreator/latest/bin/qtcreator-ros
之后导入opencv库和ros库正常进行程序编写即可。
- #include <image_transport/image_transport.h>
- #include <opencv2/highgui/highgui.hpp>
- #include <cv_bridge/cv_bridge.h>
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指令,确认自己输入的绝对路径是否正确。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。