我已经从一个节点发布了一个图像,然后我想在我的第二个节点中订阅该图像。但是在第二个节点中订阅它之后,当我尝试将它存储在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
}
答案 0 :(得分:0)
我认为问题在于你的编码设置,你确定编码实际上是rgb8吗?这不太可能,因为OpenCV默认以BGR格式存储图像(例如CV_8UC3
)。您的图像实际上甚至可能不会存储为无符号字符,而是短裤,浮点数,双打等。
我始终在发布商中加入assert(image.type==CV_8UC3)
以确保编码正确