OpenCV Mat для преобразования alglib real 2d Array
Как конвертировать Opencv Mat в Alglib настоящий 2D массив?
Вот пример, где я застрял
Mat Col(28539,97,CV_32F);
Я хочу преобразовать это Mat
Альблибу real_2d_array
для обучения классификатора.
1 ответ
Mat Col(28539, 97, CV_32F);
является двумерным (28539 строками, 97 столбцами) плотным массивом с плавающей точкой (CV_32F = float) в OpenCV.
Почти эквивалентный тип данных alglib
// bi-dimensional real (double precision) array
real_2d_array matrix;
Расположение данных в Mat
совместим с real_2d_array
(и большинство типов плотных массивов из других наборов инструментов и SDK).
Простой способ конвертировать это:
const int rows(28539);
const int columns(97);
matrix.setlength(rows, columns);
for (int i(0); i < rows; ++i)
for (int j(0); j < columns; ++j)
matrix(i, j) = Col.at<float>(i, j);
Mat::at
возвращает ссылку на указанный элемент массива.
РЕДАКТИРОВАТЬ
void alglib::dfbuildrandomdecisionforest(
real_2d_array xy,
ae_int_t npoints,
ae_int_t nvars,
ae_int_t nclasses,
ae_int_t ntrees,
double r,
ae_int_t& info,
decisionforest& df,
dfreport& rep);
xy
это обучающий набор (строки, соответствующие компонентам выборки, и столбцы, соответствующие переменным).Для задачи классификации первым
nvars
из столбцов содержат независимые переменные. Последний столбец будет содержать номер класса (от 0 доnclasses-1
). Дробные значения округляются до ближайшего целого числа.npoints
размер тренировочного набора (>=1
).nvars
количество независимых переменных (>=1
).nclasses
должно быть>1 для классификации.ntrees
количество деревьев в лесу (>=1
).r
процент тренировочного набора, используемого для построения отдельных деревьев (0 < R <= 1
).
Остальные параметры являются выходными параметрами. В случае возникновения проблем вы должны проверить info
:
info
код возврата:- -2, если есть точка с номером класса за пределами
[0..nclasses-1]
, - -1, если были переданы неверные параметры (
npoints<1
,nvars<1
,nclasses<1
,ntrees<1
,r<=0
или жеr>1
). - 1, если задача была решена.
- -2, если есть точка с номером класса за пределами