OpenCV CLI VC# VS2008 VS2012 画像処理 GUIプログラミング 画像処理の研究を行う事になったので、画像処理について勉強しています。

前回の続き

Prewitt

  • 水平・垂直エッジを検出するフィルタです。
水平方向フィルタ
-101
-101
-101
垂直方向フィルタ
-1-1-1
000
111

例:濃淡画像のみ

メイン部(フォームのMenuStripクリック時に発生)

  • 流れ
  1. 画像領域確保
    1. pictureBoxIplから入力画像確保
    2. 濃淡画像へ変換
    3. 出力画像の領域確保
  2. 色空間変換(BGR -> GRAY)
  3. フィルタ処理(po.Filtering)
  4. pictureboxIpl2へ結果出力
※ここには記述してませんが、Cv.CreateImageで確保した領域はCv.ReleaseImageで解放して下さい
  • 画像の領域確保はメイン側で行う。
    • ※無駄なByte配列を確保していました " Byte[] pix_src = new Byte[W*H] " ←いらない
PixOperationクラス
  • 画素値をポインタで直接操作するためのクラス.
  • プロジェクトのプロパティ/ビルド から、アンセーフコードの許可(F)にチェックを入れること


  1. カラー画像は濃淡画像へ変換, 濃淡画像はコピーを取る.
  2. byte型(unsigned char)のポインタを用いて、OpenCvSharp.IplImageの画素値へアクセスする.
  3. offset(注目画素値)の8近傍に対してフィルタ処理(Aperture size = 3)
  4. 濃淡画像8ビットなので、画素値の範囲は0〜255. それ以外の値は白または黒に置き換え.
  5. int型の計算結果(pix)をbyte型に直して出力用画像のポインタ操作で注目画素値に順次書き込み (ptr_dst[offset])

結果:六花亭のサクサクパイにフィルタリング

  • 元画像/水平エッジ/垂直エッジ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

カウンタ

カウンタ




Menu

null

フリーエリア

管理人/副管理人のみ編集できます