1
下面的代碼片段從ros訂戶節點,其中視頻圖像框架根據主題訂閱並顯示。根據我的要求,cv_ptr-> image需要被轉換爲C++字符串,以便我可以創建字節數組(矢量)。ROS cv_bridge ImagePtr C++字符串轉換
void imageCb(const sensor_msgs::ImageConstPtr& msg)
{
cv_bridge::CvImagePtr cv_ptr;
try
{
cv_ptr = cv_bridge::toCvCopy(msg, enc::BGR8);
}
catch (cv_bridge::Exception& e)
{
ROS_ERROR("cv_bridge exception: %s", e.what());
return;
}
if (cv_ptr->image.rows > 60 && cv_ptr->image.cols > 60)
cv::circle(cv_ptr->image, cv::Point(50, 50), 10, CV_RGB(255,0,0));
cv::imshow(WINDOW, cv_ptr->image);
cv::waitKey(3);
}
基本上我尋找API其將cv_ptr->圖像幀緩衝器中的C++串。經過基於訂閱主題圖像,我需要將相同的轉換中的字節數組,以便它可以在activemqcpp生產者被插入因爲另一端的activemqjava用戶期望在字節流格式中相同。下面
string img_string = (copy operation) cv_ptr->image;// Not sure how to copy this buffer in c++ string
vector <unsigned char> vec(img_string.begin().img_string.end());
是類規範按cv_bridge.h文件。
class CvImage;
typedef boost::shared_ptr<CvImage> CvImagePtr;
typedef boost::shared_ptr<CvImage const> CvImageConstPtr;
class CvImage
{
public:
std_msgs::Header header;
std::string encoding;
cv::Mat image;
sensor_msgs::ImagePtr toImageMsg() const;
void toImageMsg(sensor_msgs::Image& ros_image) const;
typedef boost::shared_ptr<CvImage> Ptr;
typedef boost::shared_ptr<CvImage const> ConstPtr;
};
任何人都可以建議如何在roscpp中實現相同?
你的意思是說:CV ::墊圖像= cv_ptr->圖像;字符串mystring(image.begin(),image.end ());現在push_back向量中的字符串。 –
user2907032
這是一個常規數組(但不是一個字符串,每個char數組不是一個字符串!!),所以你可以直接訪問它的元素並從那裏初始化向量。 正如你所說cv :: Mat已經定義了開始和結束迭代器,你可以直接從cv :: Mat實例初始化一個向量,如: '''std :: vector my_vec(cv_ptr-> image .begin(),cv_ptr-> image.end());''' –
Ongun
它給編譯錯誤,因爲cv_ptr是一個boost shared_ptr,它沒有開始和結束的方法,所以我沒有任何選擇,除了分別創建字符串並在矢量內迭代。 – user2907032