ROS convertit les images OpenCV en version de sujet d'image

Exigence : publier les images RVB et les images de profondeur dans le jeu de données TUM en tant que rubriques de type Image. La classe cv_bridge est fournie dans ROS pour nous aider à convertir entre les formats d'image ROS et OpenCV.

Définissez d'abord deux image_transport::Publisherobjets, définissez leur sujet et la longueur du tampon. Réglez ensuite la fréquence de publication de l'expéditeur sur 15 ips (c'est-à-dire 15 images par seconde). Ensuite, dans la boucle while, définissez deux objets cv::Mat rgb et depth pour recevoir et lire des images, sélectionnez -1 pour la carte de profondeur et sélectionnez 1 pour la carte de couleurs.

Définissez ensuite deux sensor_msgs::ImagePtrobjets et utilisez cv_bridge::CvImagela fonction pour convertir l'image OpenCV en image ROS. La fonction a trois entrées : l'en-tête du package de message standard, l'encodage de l'image et l'image source OpenCV, puis appelez toImageMsg() pour le convertir en message image.

Enfin, en publiant le message de publication de l'objet, loop_rate.sleep() contrôle le temps de chaque boucle pour qu'il soit le même.

	// 告诉roscore要在该话题下发布图像
    image_transport::Publisher rgb_pub = it.advertise("rgb", 15);
    image_transport::Publisher depth_pub = it.advertise("depth", 15);
    // 设置发布频率15fps(每秒15帧)
    ros::Rate loop_rate(15);
    int index = 0;
    while (nh.ok()) {
    
    
            std::cout << "正在发布第" << index << "帧rgb-d话题" << std::endl;
            if (index >= rgb_frames.size()) return 1;
            cv::Mat rgb = cv::imread(rgb_frames[index], 1);
            cv::Mat depth = cv::imread(depth_frames[index], -1);
            sensor_msgs::ImagePtr msg_rgb = cv_bridge::CvImage(std_msgs::Header(), "bgr8", rgb).toImageMsg();
            sensor_msgs::ImagePtr msg_depth = cv_bridge::CvImage(std_msgs::Header(), "mono16", depth).toImageMsg();
            // 发布消息
            rgb_pub.publish(msg_rgb);
            depth_pub.publish(msg_depth);
            // ros::spinOnce();
            // 通过睡眠度过每次循环剩下的时间
            loop_rate.sleep();
            index++;
    }

La luxure est un poison qui fait souffrir les gens, la beauté est comme un tigre qui blesse les autres, l'immoralité sexuelle est un désastre, pas une bénédiction, et un homme qui freine le précipice.

Supongo que te gusta

Origin blog.csdn.net/qq_42257666/article/details/131492399
Recomendado
Clasificación