wiki:HowTo/BoostStudy2

Version 5 (modified by 村山 俊之, 14 years ago) ( diff )

--

Boost.勉強会 #2 ノート

Boost 世界一周の旅

  • Property Tree

木構造を持つデータプロパティ管理。 XML (RapidXml), JSON, INI ファイルパーサ提供

boost::property_tree::ptree型

  • Uuid

ユニークID生成。乱数生成器のデフォルトは mt19937

  • Range2.0

Rangeアルゴリズム (イテレータの組ではなく範囲を渡す)、 Rangeアダプタ (遅延評価) が追加された。

要チェック→Oven

  • Filesystem v3

path 日本語対応等

string と wstrint の両方を使用するためにオーバーロードが必要なくなった?

  • Polygon

平面多角形 (2D) のアルゴリズム。

  • Meta State Machine (MSM)

新たな状態マシンライブラリ。状態遷移表を直接記述。

まとめ

  • 1.44.0 はかなり充実。特に Range 2.0 はオススメ

Boost.Graph 入門

グラフ

  • 頂点 vertex と辺 edge からなる
  • 配列・線形リンクリスト (直線、木)

有向グラフ・無向グラフ

  • 辺に向きがあるか否か

操作

頂点と線を作ったり、できたグラフの中を辿ったり…

JR 最長片道切符

とにかく遠回りして一番長い距離の切符 (のルート) を求める

  • →挫折した。データ入力が大変 (そりゃそーだw)
    • でも北海道だけは全部入力したよ。
  • プログラムは作ったよ。
    • 長万部駅を検索の起点にしたよ (青函トンネル超えた最初の駅)
    • 実際動かしてみたよ

なぜ Boost.Graph?

  • イテレータでのアクセスがある
    • 辺・頂点
    • 一部は pair<iter, iter> で Range !
  • malloc/for → STL(コンテナ/アルゴリズム)

質疑応答

  • 直線、木もグラフだよね?
    • →正確にはサブセット?
  • テンプレート引数の書く順番間違えたら MS-VS だとエラー箇所の赤線表示でる?
    • でた。 VS2010パネェ

Boost.GIL 画像処理入門

Generic Image Library

目標

(初歩的な) 動体検出ができるようになる!

GIL とな?

  • 画像データ保持用コンテナとイテレータ。

前提知識

  • 色空間
    • RGB/RGBA ... o
    • HSV ... x
    • YCbCr ... x
    • CMY/CMYK ... o
    • L*a*b* ... x
    • Grayscale ... o
    • etc...
  • 種類
    • ベクタ ... x
    • ラスタ ... o
  • 画像の構造
    • ピクセルの集まり
    • データ構造
      • データの持ち方は多様。配列を色別に分けたり分けなかったり…
  • 動画像の構造
    • コマ送り

基礎の基礎

  • 画像の入出力
    • JPEG, PNG, TIFF をサポート
      rgb8_image_t img;
      jpeg_read_image("hoge.jpg", img); // 入力
      jpeg_write_view("fuga.jpg", view(img)); // 出力
      
  • 型宣言は ColorSpace, BitDepth, ClassType の組み合わせで表現
    • ColorSpace: rgb, bgr, cmyk, ...
    • BitDepth: 8, 8s, 16, 16s, 32f, ...
    • ClassType: image, view, loc, pixcel, ptr, ...
  • 画像へのアクセス
    • 直接 Image は操作しない。 Image View を使用
      jpeg_read_image("hoge.jpg", img); // 読み込み
      step1 = view(img); // View を取得
      step2 = subimage_view(step1, 200, 300, 150, 150); // 切り取り
      step3 = color_converted_view<rgb8_view_t, gray8_pixel_t>(step2); // グレースケール化
      step4 = rotated180_view(step3); // 回転
      step5 = subsampled_view(step4, 2, 1);
      jpeg_write_view("hoge_transform.jpg", step5);
      
  • ピクセルへのアクセス
    • image_view::operator()
    • Iterator
      • 画像の上から下に向かって水平行ごとに走査する。

動体検出アルゴリズム作成

フレーム間の差分を引くところ

  • グレースケール化した画像の同位置ピクセルを引き算するだけ

参考情報

質疑応答

  • ビューを 1 から作ることは可能?
    • 作れるけど簡単じゃないかも…
  • ビューへの操作をイメージに固定することは可能?
    • イメージへコピーするメソッドがある
  • 色空間の独自実装は可能?
    • 比較的簡単らしい
  • 型名が Boost っぽくない
    • 実は typedef 。裏ではすんげー長いテンプレート引数が…
  • ビューのフィルタ操作による変換コストは?
    • 色空間の変換を除けばコストは 0 のハズ
  • 中身が const な image を作るには
    • rgb8c_image_t のように BitDepth のうしろに "c" が入った型名を使う
    • 関数が view を受け取るときは const 参照で受け取ることが推奨されている。この const は view の設定が const なのであって、画像自体が const になるわけではない。
Note: See TracWiki for help on using the wiki.