トップページデータベース研究OpenCV のプログラム例)dlib C++ Library に付属のサンプルプログラムで SURF を求める

dlib C++ Library に付属のサンプルプログラムで SURF を求める

Ubuntu を使うとして手順を説明する.

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行.

sudo apt update
sudo apt -yV upgrade
sudo /sbin/shutdown -r now

いくつかのパッケージのインストール

sudo apt install libx11-dev

DLib のビルドとインストール

画像ファイル fruits.jpg, home.jpg のダウンロード

画像ファイル fruits.jpg, home.jpg のダウンロード手順は,別ページで説明している.

https://github.com/opencv/opencv/tree/master/samples/data で公開されている fruits.jpg, home.jpg を使用する(謝辞:画像の作者に感謝します)

SURF を標準出力に表示

dlib C++ Library を用いて SURF

#include <dlib/image_keypoint/draw_surf_points.h>
#include <dlib/image_io.h>
#include <dlib/image_keypoint.h>
#include <fstream>

using namespace std;
using namespace dlib;

int main(int argc, char** argv)
{
        array2d<rgb_pixel> img;
        load_image(img, argv[2]);


        std::vector<surf_point> sp = get_surf_points(img);
        cout << "number of SURF points found: "<< sp.size() << endl;

	std::vector<surf_point>::iterator it;
	for( it = sp.begin(); it != sp.end(); it++ )
        {
            cout << "center of first SURF point: "<< it->p.center << endl;
            cout << "pyramid scale:     " << it->p.scale << endl;
            cout << "SURF descriptor: \n" << it->des << endl;
        }

	if ( atoi(argv[1]) != 0 ) {
	  image_window my_window(img);
	  draw_surf_points(my_window, sp);
	  my_window.wait_until_closed();
	}
}

上のソースコードを,a.cのようなファイル名で保存し, 次の手順でビルドして実行

g++ -I/usr/local/include a.c -L/usr/local/lib -ldlib -lpthread -lX11
./a.out 0 home.jpg 
./a.out 0 fruits.jpg 

[image]

[image]

[image]
./a.out 1 home.jpg 
./a.out 1 fruits.jpg 

[image]

[image]