0

我已经从一个节点发布了一张图片,然后我想在我的第二个节点中订阅该图片。但是在第二个节点中订阅它之后,当我尝试将它存储在 cv::Mat 图像中时,它会被扭曲。

以下代码中的 patchImage 失真。有一些水平线和同一图像的四个图像合并。

我的代码概述如下。

first_node_publisher
{
        im.header.stamp = time;
        im.width = width;
        im.height = height;
        im.step = 3*width;
        im.encoding = "rgb8";

        image_pub.publish(im);
} 

second_node_imageCallBack(const sensor_msgs::ImageConstPtr& msg)
{
       cv::Mat patchImage;
       cv_bridge::CvImagePtr cv_ptr;

       try
            { 
                cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::RGB8); //
            }

        catch (cv_bridge::Exception& e)
            {
                ROS_ERROR("cv_bridge exception: %s", e.what());
            }


        patchImage=cv_ptr->image;
        imshow("Received Image", patchImage); //This patchImage is distored
    }
4

1 回答 1

0

我相信问题出在您的编码设置上,您确定编码实际上是 rgb8 吗?这不太可能,因为 OpenCV 默认以 BGR 格式存储图像(例如CV_8UC3)。也有可能您的图像实际上甚至没有存储为无符号字符,而是短裤、浮点数、双精度数等。

我总是包含assert(image.type==CV_8UC3)在我的发布者中以确保编码正确

于 2013-12-17T05:19:52.200 回答