c++ OpenCV Turn a Mat into a 1 Dimensional Array

前端 未结 1 1331
南旧
南旧 2021-01-28 23:17

I have this Mat:

Mat testDataMat(386, 2, CV_32FC1, testDataFloat);

Which takes in from:

float testDataFloat[386][2         


        
相关标签:
1条回答
  • 2021-01-28 23:32

    sample includes:

    1. direct method to convert from float 2d array to float 1d array.
    2. way to create a cv::Mat from 2D float array
    3. way to create 1D float array from a 2D cv::Mat that has no padding (e.g. stepsize = size of a single row)

    This one works for me:

    int main()
    {
        const int width = 2;
        const int height = 386;
        float testDataFloat[height][width];
    
        // create/initialize testdata
        for(unsigned int j=0; j<height; ++j)
            for(unsigned int i=0; i<width; ++i)
            {
                if(j%5 == 0)
                    testDataFloat[j][i] = 0.0f;
                else
                    testDataFloat[j][i] = 1.0f;
            }
    
        // -----------------------------------------------------------
        // Direct convert from 2D array to 1D array:
        float * testData1DDirect = (float*)testDataFloat;
    
    
    
        // -----------------------------------------------------------
        // create Mat with 2D array as input:
        cv::Mat testDataMat(height, width, CV_32FC1, testDataFloat);
    
        // convert from Mat to 1D array
        // this works only if there is no padding in the matrix.
        float * testData1D = (float*)testDataMat.data;
    
    
        // test whether the arrays are correct
        for(unsigned int i=0; i<width*height; ++i)
        {
            if(testData1D[i] != testData1DDirect[i])
                std::cout << "ERROR at position: " << i << std::endl;
        }
    
        // output the Mat as an image:
        cv::imshow("test", testDataMat);
        cv::waitKey(0);
    
    }
    
    0 讨论(0)
提交回复
热议问题