在ROS中用openCV显示摄像头并发布图像数据

    技术2022-07-10  143

    在ROS中用openCV显示摄像头并发布图像数据

    前言使用C++实现CMakeLists.txt配置 使用python实现查看usb串口使用情况永久打开串口权限ROS使用openCV进行图片接收,并显示客官!如果觉得有用,给俺点赞支持下呗!

    前言

    自己也是刚开始学习ros和openCV,经常会踩很多坑,比如这次在ros中使用openCV,按照很多博客写的,最后要么死机,要么黑框。对此,经过请教学长,终于调通,分享给大家以供参考。

    使用C++实现

    #include <iostream> #include <ros/ros.h> #include <cv_bridge/cv_bridge.h> // 将ROS下的sensor_msgs/Image消息类型转化为cv::Mat数据类型 #include <sensor_msgs/image_encodings.h> // ROS下对图像进行处理 #include <image_transport/image_transport.h> // 用来发布和订阅图像信息 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/videoio.hpp> int main(int argc, char** argv) { ros::init(argc, argv, "imageGet_node"); // ros初始化,定义节点名为imageGet_node ros::NodeHandle nh; // 定义ros句柄 image_transport::ImageTransport it(nh); // 类似ROS句柄 image_transport::Publisher image_pub = it.advertise("/cameraImage", 1); // 发布话题名/cameraImage ros::Rate loop_rate(200); // 设置刷新频率,Hz cv::Mat imageRaw; // 原始图像保存 cv::VideoCapture capture(0); // 创建摄像头捕获,并打开摄像头0(一般是0,2....) if(capture.isOpened() == 0) // 如果摄像头没有打开 { std::cout << "Read camera failed!" << std::endl; return -1; } while(nh.ok()) { capture.read(imageRaw); // 读取当前图像到imageRaw cv::imshow("veiwer", imageRaw); // 将图像输出到窗口 sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", imageRaw).toImageMsg(); // 图像格式转换 image_pub.publish(msg); // 发布图像信息 ros::spinOnce(); // 没什么卵用,格式像样 loop_rate.sleep(); // 照应上面设置的频率 if(cv::waitKey(2) >= 0) // 延时ms,按下任何键退出(必须要有waitKey,不然是看不到图像的) break; } }

    一定要注意,waitKey()必须要有,且不为0,其他大多博客这点都没有,导致出错 *ls -l /dev/ttyUSB 命令查看串口 **

    CMakeLists.txt配置

    添加(最后两个的image_Get是生成可执行文件的名字,根据自己来设定):

    find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(image_Get src/image_Get.cpp) target_link_libraries(image_Get ${catkin_LIBRARIES} ${OpenCV_LIBS})

    使用python实现

    未完待续

    查看usb串口使用情况

    ls -l /dev/ttyUSB*

    永久打开串口权限

    若出现[Errno 13] Permission denied: '/dev/ttyUSB0’问题,可以用下面命令打开串口权限:

    sudo chmod 777 /dev/ttyUSB0 sudo usermod -aG dialout nankel

    其中nankel为用户名

    ROS使用openCV进行图片接收,并显示

    参考本人博客:订阅部分

    客官!如果觉得有用,给俺点赞支持下呗!

    欢迎留言讨论,指出不足和建议!

    Processed: 0.010, SQL: 9