Йоло Даркнет: Ошибка чтения данных CV :: Mat в данные

Я пытаюсь преобразовать часть предсказания изображения Yolo Darknet в C ++. Мне нужно прочитать данные изображения cv :: Mat в data_box. Это структура data_box

typedef struct matrix {   int rows, cols;   float **vals; } matrix;
typedef struct {
int w, h;
matrix X;
matrix y;
int shallow;
int *num_boxes;
box **boxes;
} data_box;

//Read the test,png which is 56x56 image.
cv::Mat img= cv::imread("test.png");
//Create an instance of the data_box

//I'm not sure if this is correct.
data_box db ;
db.X.cols = img.cols;
db.X.rows = img.rows;
db.w = 56;
db.h = 56;
//I think the issue is here. By some reason, the image data is not being read
db.X.vals = (float**)image2->imageData;

Тогда я получаю ошибку нарушения доступа из этой функции
matrix pred = network_predict_data(net, db, img);

matrix network_predict_data(network *net, data_box test, cv::Mat img)
{
int i, j, b;
int k = net->outputs;

matrix pred = make_matrix(test.X.rows, k);
float *X = (float*)calloc(net->batch*test.X.cols, sizeof(float));
for (i = 0; i < test.X.rows; i += net->batch) {
for (b = 0; b < net->batch; ++b) {
if (i + b == test.X.rows) break;
float temp = *test.X.vals[i + b];
memcpy(X + b*test.X.cols, test.X.vals[i + b], sizeof(float));
}
float *out = network_predict(net, X);
for (b = 0; b < net->batch; ++b) {
if (i + b == test.X.rows) break;
for (j = 0; j < k; ++j) {
pred.vals[i + b][j] = out[j + b*k];
}
}
}
free(X);
return pred;
}

Мои вопросы: 1) Это правильный способ создать объект data_box? 2) Как можно перевести image-> data в значения data_box? 3) Есть ли другой способ сделать эту операцию эффективно?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …