我想将cv:Mat图像保存为矢量类型? 我写了一个函数,但我总是得到错误信息。
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <cv_bridge/cv_bridge.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <vector>
#include "opencv2/opencv.hpp"
using namespace std;
#ifdef _OPENMP
#include <omp.h>
#endif
# define IM_X 200
# define IM_Y 200
//Globale Variablen:
cv::Mat image;
cv::Mat resize_image;
//Funktionen:
string convertInt(int number);
vector<float> MatToFloatVec(const cv::Mat& mat) ;
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
try
{
cv::imshow("view", cv_bridge::toCvShare(msg, "bgr8")->image);
cv::waitKey(30);
}
catch (cv_bridge::Exception& e)
{
ROS_ERROR("Could not convert from '%s' to 'CV_32FC1'.", msg->encoding.c_str());
}
}
int main(int argc, char **argv)
{
/*
ROS-Image Subscriber--> siehe Tutorial!!
*/
ros::init(argc, argv, "image_listener");
ros::NodeHandle nh;
cv::namedWindow("view");
cv::startWindowThread();
image_transport::ImageTransport it(nh);
image_transport::Subscriber sub = it.subscribe("/image_raw", 1, imageCallback);
ROS_INFO_STREAM("Hier vor Grey");
std::vector<float>test = MatToFloatVec(image);
}
vector<float> MatToFloatVec(const cv::Mat& mat)
{
return vector<float>(mat.begin<uchar>(), mat.end<uchar>());
}
我总是收到错误消息: [INFO] [1433244615.907292392]:Hier vor Gray 浮点异常(核心转储)
问题是什么?
任何人都可以帮助我
答案 0 :(得分:0)
std::vector<>
有两个ctors接受两个值:
您正在传递uchar
迭代器,可能需要float
个迭代器。
此外,代码中的哪个位置表示image
是8UC1
?
答案 1 :(得分:0)
不,我改变了方法,现在它正在运行。
vector<float> MatToFloatVec(const cv::Mat& mat)
{
std::vector<float> array;
array.assign((float*)mat.datastart, (float*)mat.dataend);
return array;
}