收到的消息在openCv中显示时图像变形失真

时间:2013-09-12 12:41:24

标签: opencv ros

我已经从一个节点发布了一个图像,然后我想在我的第二个节点中订阅该图像。但是在第二个节点中订阅它之后,当我尝试将它存储在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
    }

1 个答案:

答案 0 :(得分:0)

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

我始终在发布商中加入assert(image.type==CV_8UC3)以确保编码正确