将Mat转换为unsigned char*

9

有人能告诉我如何在OpenCV中将Mat转换为unsigned char*,并且数据是否会成为数组?此外,我想知道如何将vector<vector<double>>转换为float*,使其成为指向数组的指针?谢谢。


你使用的是什么类型的Mat?无论如何,看一下cv::Mat.data成员 - 它是指向内部Mat存储的指针。 - Rasim
1个回答

8

正如之前所提到的,您应该使用 cv::Matdata 成员:

cv::Mat m;
...
uchar *data = m.data;

关于您的第二个问题:首先,当您从double转换为float时,会丢失一些数据。并且没有现成的解决方案可以解决这个问题,所以只需使用简单的循环将向量复制到数组指针中即可:

float* toArray(vector<vector<double> >& arr)
{
    if (arr.empty())
    {
        return NULL;
    }
    else
    {
        //I assume that each vector (element of arr) has the same size
        int m = arr.size();
        int n = arr[0].size();
        float *res = new float[m * n];
        int count = 0;

        for (int i=0; i<m; i++)
        {
            for (int j=0; j<n; j++)
            {
                res[count++] = (float) arr[i][j];
            }
        }
        return res;
    }
}

这是你对第二个问题的意思吗?float * kernelarr = nullptr; for (int row = 0; row < vec.size(); row++) for (int col = 0; col < vec[row].size(); col++) { kernelarr = &vec[row][col]; } - Abhishek Thakur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接