I have this Mat
:
Mat testDataMat(386, 2, CV_32FC1, testDataFloat);
Which takes in from:
float testDataFloat[386][2
sample includes:
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);
}