使用ros转帧
Using Ros to transfer frames
我正在使用 ros 图像传输来接收和显示图像。在我的回调函数中,我有以下几行
const cv::Mat *recivedRosImage;
recivedRosImage= &(cv_bridge::toCvShare(msg, "bgr8")->image);
cv::imshow("view", *recivedRosImage);// this doesn't work
//cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image); this works
recivedRosImage 指向空图片是什么原因?
Per this ROS wiki article, toCvShare()
returns a CvImageConstPtr
这是 boost::shared_ptr<CvImage const>
.
的类型定义
如果是:
recivedRosImage = &(cv_bridge::toCvShare(msg, "bgr8")->image);
.. toCvShare()
返回的boost::shared_ptr<CvImage const>
称为临时对象。在 C++ 中,临时对象被销毁作为评估完整表达式的最后一步,该完整表达式在词法上包含它们的创建点(请参阅 C++ 规范的 [class.temporary] 部分)。因此,recivedRosImage
是指向 const CvImage
的 image
成员的指针,它在赋值表达式的末尾被销毁,并且您的程序正在通过取消引用 recivedRosImage
来调用未定义的行为在下一行。
相比之下,这行代码:
cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);
.. 之所以有效,是因为临时 CvImageConstPtr
对象的生命周期延长到 cv::imshow()
调用。
解决问题的一种方法是像这样保持临时 CvImageConstPtr
对象:
CvImageConstPtr sharedCvImage = cv_bridge::toCvShare(msg, "bgr8");
cv::imshow("view", sharedCvImage->image);
另请参阅上面链接的 wiki 文章的第 1.5 节,共享图像数据的示例。
我正在使用 ros 图像传输来接收和显示图像。在我的回调函数中,我有以下几行
const cv::Mat *recivedRosImage;
recivedRosImage= &(cv_bridge::toCvShare(msg, "bgr8")->image);
cv::imshow("view", *recivedRosImage);// this doesn't work
//cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image); this works
recivedRosImage 指向空图片是什么原因?
Per this ROS wiki article, toCvShare()
returns a CvImageConstPtr
这是 boost::shared_ptr<CvImage const>
.
如果是:
recivedRosImage = &(cv_bridge::toCvShare(msg, "bgr8")->image);
.. toCvShare()
返回的boost::shared_ptr<CvImage const>
称为临时对象。在 C++ 中,临时对象被销毁作为评估完整表达式的最后一步,该完整表达式在词法上包含它们的创建点(请参阅 C++ 规范的 [class.temporary] 部分)。因此,recivedRosImage
是指向 const CvImage
的 image
成员的指针,它在赋值表达式的末尾被销毁,并且您的程序正在通过取消引用 recivedRosImage
来调用未定义的行为在下一行。
相比之下,这行代码:
cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);
.. 之所以有效,是因为临时 CvImageConstPtr
对象的生命周期延长到 cv::imshow()
调用。
解决问题的一种方法是像这样保持临时 CvImageConstPtr
对象:
CvImageConstPtr sharedCvImage = cv_bridge::toCvShare(msg, "bgr8");
cv::imshow("view", sharedCvImage->image);
另请参阅上面链接的 wiki 文章的第 1.5 节,共享图像数据的示例。