dlibでOpenCVが使えるかもしれない件
2016年11月15日 (開発者日記)
dlibのメソッド見てたらこんなん見つけた
・・・これ完全にOpenCVと親和性あるんじゃね?
試してみたらマジでありました。
後日コードを載せます。
2016年11月15日 (開発者日記)
dlibのメソッド見てたらこんなん見つけた
・・・これ完全にOpenCVと親和性あるんじゃね?
試してみたらマジでありました。
後日コードを載せます。
2016年10月21日 (開発者日記)
dlibで処理を行った後、使い慣れたopencvにデータを渡したいなーということがあると思います。
そのようなときはこうします。
dlibで画像を表すクラスはdlib::array2d<dlib::bgr_pixel>です。
それをMatクラスに渡すには「dlib/opencv.h」をインクルードして、
cv::Mat cvimage = dlib::toMat(dlibimage);
みたいに書きます。
Matクラスをarray2d<bgr_pixel>に渡すには以下のようにします。
「dlib/opencv.h」をインクルードして、
dlib::array2d<dlib::bgr_pixel> dlibimage;
assign_image(dlibimage, cv_image<bgr_pixel>(cvimage));
みたいに書きます。
以上備忘録
2016年9月30日 (開発者日記)
OpenCVにおいて画像を格納するクラスはほとんどの方がcv::Matクラスを使用していると思います。Matクラスの振る舞いを理解しておくとコーディングがはかどります。
cv::Mat blue(300,300,CV_8UC3,cv::Scalar(0,0,255));
cv::Mat copy = blue;
for(int y = 0;y < copy.rows;++y){
for(int x = 0;x < copy.cols;++x){
for(int i = 0;i < 3;++i){
copy.data[copy.step * y + copy.channels() * x + i] = 255;
}
}
}
みたいなコードがあったときに、変数copyは白一色を表しますが、Mat型では初期化演算子、代入演算子ともに値のコピーを作成するのではなく参照先のコピーを作るだけです。つまりcopyが指しているメモリ空間は変数blueと共用していて、copyの値を書き換えるとblueの値も書き換わってしまいます。この結果blueは白色の画像になります。
メモリーの共有を防ぐには
cv::Mat copy = blue.clone();
という様に書きます。
OpenCVでは前者を浅いコピー、後者を深いコピーといいます。前者のほうが高速にコピーを行えます。
なぜOpenCVがこのような使用になっているかというと、画像の範囲を指定して処理を行いたいときにこの使用が生きてきます。
例えば画像の中心だけ画像処理させたいとき、このように書けます。
cv::Mat white(300,300,CV_8UC3,cv::Scalar(255,255,255));
cv::Mat roi = white(cv::Rect(150,150,150,150));
for(int y = 0;y < roi.rows;++y){
for(int x = 0;x < roi.cols;++x){
for(int i = 0;i < 3;++i){
roi.data[roi.step * y + roi.channels() * x + i] = 0;
}
}
}
このコードでは白い画像の中心150*150ピクセルが黒色になります。
このように画像の範囲を指定して処理を行いたいときに、威力を発揮します。(自分はそれしか知りませんが、ほかにも使用用途があれば教えてください…)
2016年8月30日 (開発者日記)
こんにちは。
明るい家族計画の望月です。
今回はdlibというC++のライブラリを使用しました。
dlibは画像処理や機械学習などの機能を持ち、顔の特徴点を取得するのに使用しました。
特徴点取得の参考画像がこちらです。
dlibに用意されている学習データを用いることで顔画像領域の切り出し、ランドマークの検出などが行えます。ちなみにOpenCVを用いても顔画像を切り出すことは可能ですが、それよりも精度よく顔画像を切り出すことができます。
またランドマークはdlibによって、ソートされて出力されるので、モーフィングなどで重要な対応点なども簡単に調べることができます。
こんな感じで対応点をソートしてくれます。
ただdlibの導入は少し面倒なのでCMakeの使い方には慣れておいたほうが良いかもしれません。
まだ慣れていないのもありますが構文もかなり難しいです。
また、特徴点が取得できたので、赤ちゃんの平均顔画像も作成しました。
平均顔画像の作成にはOpenCVを使用しました。
平均顔の赤ちゃんは非常に可愛いです。
この可愛い赤ちゃん画像から若年変化について考えていきたいと思います。
最近のコメント