c++ OpenCV 将 Mat 转换为一维数组

2023-12-11

我有这个Mat:

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

其中取自:

float testDataFloat[386][2];

但我不知道如何将它变成一维数组。

有什么帮助吗?


样本包括:

  1. 从浮点二维数组转换为浮点一维数组的直接方法。
  2. 从 2D 浮点数组创建 cv::Mat 的方法
  3. 从没有填充的 2D cv::Mat 创建 1D 浮点数组的方法(例如,步长 = 单行的大小)

这对我有用:

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);

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++ OpenCV 将 Mat 转换为一维数组 的相关文章

随机推荐