2017-02-15 3 views
2

OpenCV 3.2 平均ファイル "mean.binaryproto"を使用してCaffeモデルをダウンロードします。私は平均で入力画像を減算し、それを使用したいと思います。 Caffe Modelで使用する平均値から画像を差し引くために、「mean_file_proto」をOpenCV Matに読み込む方法は?Caffe Modelで使用する平均値から画像を差し引くために、「mean_file_proto」をOpenCV Matに読み込む方法は?

編集: Caffeを使用せずにOpenCVだけでも使用できますか?私はWindows 10 64bitでVisual Studio 2015でOpenCV 3.2を使用しています。私はウェブカメラから画像を取得し、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_32FC1cv::Matを作成することができます。

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

最後に、これらのチャネルを持つベクトルを移入し、あなたの入力画像を含む別のcv::Matから差し引くことができ、単一のcv::Matにそれらを組み合わせることcv::merge()を使用しています。イメージがすでに正規化されている場合は、平均を再スケーリングする必要があります。

+0

ありがとうございました。 Caffeを使用せずにOpenCVだけで使用できますか?私はWindows 10 64bitでVisual Studio 2015でOpenCV 3.2を使用しています。私はウェブカメラから画像を取得し、OpenCV :: dnnを使用して平均を差し引いて結果を得たいと思います。事前に感謝します –

+1

まあ、 'ReadProtoFromBinaryFile()'は基本的にGoogleのProtobufライブラリのラッパーです。 https://github.com/BVLC/caffe/blob/master/src/caffe/util/io.cppを参照してください。私はこのライブラリを直接経験していませんが、データフォーマットの説明を与えたパーサージェネレータが必要です。 Caffeとリンクしたくない場合は、https://github.com/BVLC/caffe/blob/master/src/caffe/proto/caffe.protoでprotobufのprotocツールを実行する必要があります。 'caffe :: ReadProtoFromBinaryFile()'で使われている関数のいくつかを生成するためです。詳しくはhttps://github.com/BVLC/caffe/issues/22を参照してください。 –

+1

@ video-analysis-deep-learning CaffeのPython言語バインディングを利用して、変換ツールを使ってこれらのファイルから平均画像を抽出することもできます。 –

関連する問題