您的问题对我来说并不完全清楚,但我假设您正在尝试将 float array 加载到单行中的 OpenCV Mat 对象中。首先,一定要查看C++ 中关于构造Mat 的文档。由于您有一个一维数组,并且(我假设)您知道要提供 Mat 的 rows 和 columns,因此您应该使用 this constructor:
cv::Mat::Mat (int rows, int cols, int type, void * data, size_t step = AUTO_STEP)
这是一个代码示例:
float data[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
cv::Mat your_matrix = cv::Mat(1, 10, CV_32F, data);
cout << your_matrix.at<float>(0,2) << endl;
cout << your_matrix << endl;
它会输出:
3
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
当然,您可以根据需要更改数据类型(例如,使用int 而不是float)。您可以忽略AUTO_STEP 参数,但如果您想使用它,请务必查看有关用法的文档。此外,如果您想更改 Mat 的结构(例如,将数组拆分为多行),您可以通过更改构造函数中的 rows 和 cols 参数来实现:
float data[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
cv::Mat your_matrix = cv::Mat(2, 5, CV_32F, data);
cout << your_matrix.at<float>(1,2) << endl;
cout << your_matrix << endl;
它会输出:
8
[1, 2, 3, 4, 5;
6, 7, 8, 9, 10]
您现在已将 Mat 对象拆分为两行 5 列,而不是 1 行 10 列。
如果是 Java:
如果您想在 Java 中执行此操作,那么您已经走上了正确的道路。但是,您可能忘记指定行、列和通道/深度。像以前一样根据适合您的数据的方式更改行、列和 CvType。您可以执行以下操作:
float data[] = new float[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Mat mat = new Mat(1, 10, CvType.CV_32F);
mat.put(0, 0, data);
请务必检查Java documentation on Mat!