CvImageConstPtr toCvShare(const sensor_msgs::Image& source, const boost::shared_ptr<void const>& tracked_object, const std::string& encoding) { // If the encoding different or the endianness different, you have to copy if ((!encoding.empty() && source.encoding != encoding) || (source.is_bigendian && (boost::endian::order::native != boost::endian::order::big))) return toCvCopy(source, encoding); CvImagePtr ptr = boost::make_shared<CvImage>(); ptr->header = source.header; ptr->encoding = source.encoding; ptr->tracked_object_ = tracked_object; ptr->image = matFromImage(source); return ptr; }
CvImageConstPtr toCvShare(const sensor_msgs::Image& source, const boost::shared_ptr<void const>& tracked_object, const std::string& encoding) { if (!encoding.empty() && source.encoding != encoding) return toCvCopy(source, encoding); CvImagePtr ptr = boost::make_shared<CvImage>(); ptr->header = source.header; ptr->encoding = source.encoding; ptr->tracked_object_ = tracked_object; int type = getCvType(source.encoding); ptr->image = cv::Mat(source.height, source.width, type, const_cast<uchar*>(&source.data[0]), source.step); return ptr; }
// Deep copy data, returnee is mutable CvImagePtr toCvCopy(const sensor_msgs::CompressedImageConstPtr& source, const std::string& encoding) { return toCvCopy(*source, encoding); }