Преобразование OpenCV Mat в шкале серого

Я был следуя примеру Меня упоминали о том, как конвертировать OpenCV Mat в объект Кафе, из которого я мог делать предсказания. Из того, что я понимаю, первый раздел масштабирует изображение, а затем инициализирует класс caffe TransformationParameter:

const float img_to_net_scale = 0.0039215684;
TransformationParameter input_xform_param;
input_xform_param.set_scale( img_to_net_scale );
DataTransformer<float> input_xformer( input_xform_param, TEST );

Затем «патч» OpenCV Mat преобразуется в «input_blob». Я изменил эту часть, потому что я загружал свое изображение в оттенках серого вместо цвета.

cv::Mat patch = cv::imread( input_file_str, CV_LOAD_IMAG_GRAYSCALE  );
Blob<float> input_blob;
input_blob.Reshape(1, patch.channels(), patch.rows, patch.cols );
input_xformer.Transform( patch, &input_blob );

Наконец, я не слишком уверен, что делает этот раздел — если у меня уже есть мой OpenCV Mat, преобразованный в BLOB-объект Caffe, почему мне нужно отодвинуть вектор «input» и передать его в сеть? Разве я не могу передать input_blob прямо в сеть, чтобы вернуть мой прогноз?

std::vector<Blob<float>*> input;
input.push_back( &input_blob );

std::vector<Blob<float>*> output = net->Forward( input );

1

Решение

Вам нужно push_back ваш input_blob чтобы передать его net поскольку net ожидает своего вклада в качестве std::vector из Blobs (в принципе, может быть netс которым требуется более одного входного блоба для вывода).
Обратите внимание, что вы не копируете input_blob во входной вектор, а скорее передавая указатель на него.

2

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector