2017-02-15 29 views
2

OpenCV 3.2 Загрузите модель Caffe со средним файлом «mean.binaryproto». Я хочу вычесть свое входное изображение со средним значением и использовать его. Как читать «mean_file_proto» в Matrix OpenCV, чтобы вычесть изображение из середины для использования в модели Caffe?Как читать «mean_file_proto» в Matrix OpenCV, чтобы вычесть изображение из среднего значения для использования в модели Caffe?

Редактировать: Могу ли я использовать только OpenCV для этого, не используя Caffe? Я использую OpenCV 3.2 в Visual Studio 2015 на Windows 10 64bit. Я получаю изображение с веб-камеры, и я хочу вычесть среднее значение, используя OpenCV :: dnn получить результат.

ответ

2

Средний файл является плоским, возможно, 1 или 3 канала. Масштаб равен [0, 255].

caffe::BlobProto mean_proto; 
caffe::ReadProtoFromBinaryFile(filename, &mean_proto); // check return code 
caffe::Blob<float> mean_blob; 
mean_blob.FromProto(mean_proto); 
float *data = mean_blob.mutable_cpu_data(); 

Теперь вы можете создать cv::Mat типа CV_32FC1, для каждого канала.

cv::Mat channel(mean_blob.height(), mean_blob.width(), CV_32FC1, data); 
data += mean_blob.height() * mean_blob.width(); 

Наконец, заполнить вектор с этими каналами, а также использовать cv::merge(), чтобы объединить их в единую cv::Mat, что вы можете вычесть из другого cv::Mat, содержащего ваше входное изображение. Если ваше изображение уже нормализовано [0, 1), вам также потребуется перемасштабировать среднее значение.

+0

Спасибо. Могу ли я использовать только OpenCV для этого, не используя Caffe? Я использую OpenCV 3.2 в Visual Studio 2015 на Windows 10 64bit. Я получаю изображение с веб-камеры, и я хочу вычесть среднее значение, используя OpenCV :: dnn получить результат. Заранее спасибо –

+1

Ну, 'ReadProtoFromBinaryFile()' в основном представляет собой оболочку библиотеки Protobuf от Google. См. Https://github.com/BVLC/caffe/blob/master/src/caffe/util/io.cpp. У меня нет прямого опыта работы с этой библиотекой, но, похоже, он включает генератор синтаксического анализатора, который загружает описание формата данных. Если вы не хотите связываться с Caffe, то вам, вероятно, придется запустить проточный инструмент protobuf на https://github.com/BVLC/caffe/blob/master/src/caffe/proto/caffe.proto, для генерации некоторых функций, используемых в 'caffe :: ReadProtoFromBinaryFile()'. См. Https://github.com/BVLC/caffe/issues/22 –

+1

@ video-analysis-deep-learning. Вы также можете воспользоваться языковыми связями Caffe's Python и использовать его для записи инструмента преобразования для извлечения средних изображений из этих файлов , –