2015-06-02 1 views
0

Я хочу сохранить изображение cv: Mat в векторный тип? Я написал функцию, но всегда получаю сообщение об ошибке.Исключение с плавающей запятой при преобразовании cv :: Mat image в вектор <float> Тип

#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 Floating исключение точки (ядро сбрасывали)

В чем проблема?

Может кто-нибудь помочь мне

+0

Вы посмотрели на свалку ядра? В какой строке это происходит? – doctorlove

+0

Это происходит, когда функция MatToFloatVec вызывается –

+0

Попробуйте упростить свой код до необходимого для выявления проблемных строк. –

ответ

0

std::vector<> имеет два ctors прием два значения:

  1. размер + по умолчанию Валу.
  2. начало + итераторы конца.

Вы передаете uchar итераторы, где предположительно, float итераторы, как ожидается.

Кроме того, где в коде говорится, что image is 8UC1?

+0

Меня удивляет, что из-за этого этот код компилируется. – doctorlove

0

Нет. Я изменил метод и теперь он работает.

vector<float> MatToFloatVec(const cv::Mat& mat) 
{ 
    std::vector<float> array;  
    array.assign((float*)mat.datastart, (float*)mat.dataend); 
    return array; 
}