SSブログ

Canny エッジ検出器概要 [OpenCV]

Cannyアルゴリズムは、1次微分値がxとy方向それぞれで計算され、4つの方向微分値の集合に変換される。

Cannyアルゴリズムの最も重大で新しい側面は、個々のエッジの候補となるピクセルから輪郭を作り上げようとすること。

◆画像処理効果

処理前

image

処理後

image

以下に制作したCannyクラスのソースを示す。

Canny.h

image

Canny.cpp

image

テキスト版へのリンク

 

参考サイト


マルチスレッドと同期処理 [VB]

良く使う処理としてマルチスレッドと同期処理がある。

このクラスを作るにあたり、CreateEventで例外処理で発生し、解決するまでに苦労したので、結果を残しておく。

第1、2、3、4引数をLong型で宣言していたことが根本的な原因でした。さらに第2、第3引数をboolean型からInt32へ変更する事で最終的に解決した。

image

テキスト版へのリンク


C/C++ で名前付きパイプを使う [C/C++]

C++/CLI環境内でマネージおよびアンマネージコード(オープンソースのライブラリ)を混在させるプログラムを制作する必要がでました。

いろいろ調べてみると、対応は可能であるとの記述を多く目にすることができます。

しかし実際にコーディングを始めると、アンマネージライブラリを使用場面が多く、対応するのが面倒になりました。そこでGUI部をアンマネージで作成したEXE、データ処理部をアンマネージで作成したEXEで動かし、アプリ間を名前付きパイプで通信することにしました。

以下は実際の使い方です。

◆サーバー側(アンマネージ部)

image

 

◆ クライアント側(アンマネージ部)

image

テキスト版へのリンク

 

以上


InteliSense が利用できない [開発環境]

msdnのサイトに詳しい説明があります。

http://msdn.microsoft.com/ja-jp/library/vstudio/ks1ka3t6.aspx

そしてこの説明を参考に調査したけど解決できません。そして.ncbファイルの存在を知りますが、プロジェクト中にはありません。さらにググると驚きの記述が。。。

「Visual Studio 2010ではC++/CLI でインテリセンスが利用できない!」

.NETの場合はVBかC#を使えということでしょうか?とりあえず「Visual Studio 2008 C++ Express Edition」で開発することに。

インテリセンス効きます。やはりコーディングスピードが違います。

 

参考サイト


画像処理・認識 [画像のロード] [OpenCV]

「HighGUI」技術

画像をディスクからロードする

◆ 画像ファイルを読み込む関数

OpenCV 関数名 書式、コメント
1.x系 cvLoadImage IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR )
2.x系 cv::LoadImage IplImage* cv::LoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR )
  cv::LoadImageM LoadImageM(filename, iscolor=CV_LOAD_IMAGE_COLOR)
ファイルから,CvMatとして画像を読み込む。

読み込む画像のカラーの種類

  • CV_LOAD_IMAGE_COLOR 画像は,強制的に3チャンネルカラー画像として読み込む
  • CV_LOAD_IMAGE_GRAYSCALE 画像は,強制的にグレースケール画像として読み込む
  • CV_LOAD_IMAGE_UNCHANGED 画像は,そのままの画像として読み込む

ファイルフォーマット

  • Windows bitmaps - BMP, DIB
  • JPEG files - JPEG, JPG, JPE
  • Portable Network Graphics – PNG
  • Portable image format - PBM, PGM, PPM
  • Sun rasters - SR, RAS
  • TIFF files - TIFF, TIF
読み込む画像がカラー/グレースケールのどちらか,とデプスを指定する. カラー/グレースケールの指定は,読み込まれた画像を 3 チャンネル(CV_LOAD_IMAGE_COLOR)に変換するか, 1チャンネル(CV_LOAD_IMAGE_GRAYSCALE)に変換するか,あるいは入力画像(CV_LOAD_IMAGE_ANYCOLOR)のままにしておくかを決める.
デプスの指定は,読み込まれた画像を,以前のバージョンの OpenCV で行われたように一つのカラーチャンネルに対して 8ビットに変換するか,入力画像のままにしておくかを決める.CV_LOAD_IMAGE_ANYDEPTH が渡された場合に取りうるピクセルフォーマットは, 8 ビット符号無し整数,16 ビット符号無し整数,32 ビット符号付き整数,32 ビット浮動小数点数である.
渡されたフラグが衝突する場合,小さい値を持つフラグが優先される. 例えば, CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR というフラグの場合は, 画像は 3 チャンネルとして読み込まれる. CV_LOAD_IMAGE_ANYCOLOR は,CV_LOAD_IMAGE_UNCHANGED と等価であるが, CV_LOAD_IMAGE_ANYCOLOR には,CV_LOAD_IMAGE_ANYDEPTH と併用できるという利点がある. よって,CV_LOAD_IMAGE_UNCHANGEDは今後利用すべきではない.
出来る限り忠実に画像を読み込みたい場合は, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR を指定する。

[opencv.jp document より引用]

 

◆ 画像ファイルを書き込む関数

OpenCV 関数名 書式、コメント
1.x系 cvSaveImage int cvSaveImage( const char* filename, const CvArr* image )
2.x系 cv::SaveImage SaveImage(filename, image)
関数 cvSaveImage は,画像を指定したファイルに保存する. 画像フォーマットは,filename の拡張子により決定される(cvLoadImage を参照). この関数で保存できるのは,8 ビット 1チャンネル,あるいは 8 ビット3 チャンネル('BGR' の順)画像だけである. フォーマットやデプス,チャンネルの順序などが異なる場合は,保存する前に cvCvtScale と cvCvtColor を使って画像を変換するか,あるいは汎用的な関数 cvSave を利用して XML/YAML フォーマットで保存すること。

[opencv.jp document より引用]

 

本記事は以下の参考書を元に書いています。


boost を Windows で使う [開発環境]

1.boostとは

Boost (ブースト)とは、C++の先駆的な開発者のコミュニティ、及びそのコミュニティによって公開されているオープンソースライブラリのことを指す。コミュニティとしてのBoostはC++標準化委員会の委員により設立されており、現在でもその多くが構成員として留まっている。このような経緯もあってBoostコミュニティはC++の標準化に対してかなりの影響力を有している。実際に標準化委員会の発表した「TR1」の2/3以上がBoostライブラリを基にしている。このことからBoostはC++の標準化にあたり有効なアイデアをテストする場であるとも言える。
Boostで公開されるライブラリはコミュニティの公開レビューによって精選されている。使用にあたっては商用、非商用を問わず無償のBoost Software Licenseの下でライセンスされる。
Boostはテンプレートなどを活用して積極的にメタプログラミングやジェネリックプログラミングを取り入れていこうという傾向がある。そのためBoostライブラリの利用者はしばしばC++の現代的なアプローチに精通していることを求められる。
Wikipediaより」

 

2.インストール

ビルド済みのバイナリインストーラが以下のboostproサイトから入手できますが。今回はプロジェクト一式をダウンロードし手動でビルドおよび環境設定を行うことにします。

http://www.boostpro.com/download/

① ダウンロード

以下のサイトから入手します。

http://www.boost.org/users/download/#live

旧バージョンは以下から入手します。今回 Version 1.51.0 を使うので、ここから”boost_1_51_0.zip”をダウンロードし解凍します。

http://www.boost.org/users/history/

image

② インストール

コマンドプロンプトから解凍後のディレクトリに移動し”bootstrap.bat”を実行します。

image

b2.exe と bjam.exe が生成されます。

image

③ ビルド

以下のコマンドおよびインストールが行われます。

> b2.exe install –j2 –prefix=c:\boost

これ”C:\boost”にインストールが開始しました。

image

3.Visual C++ から使う

① インクルードパスの設定

Visual Studio のメニューから「プロジェクト」、「プロジェクトのプロパティ」を選択し、プロジェクトのプロパティページを表示する。

このプロパティのページから「VC++ディレクトリ」、「インクルードディレクトリ」、「<編集>」と選択する。

image

インクルードディレクトリダイアログが起動したら、「新しい行」ボタンを押し、追加された行にboostのインクルードディレクトリを設定する。

image

② ライブラリパスの設定

ライブラリディレクトリについても同様に設定する。

image

③ 関数を使う

後は、使うライブラリ用のヘッダーを宣言する。

#include <boost\format.hpp>

例えば、boost用のformatを使う場合は以下のように記述すればOK.

std::cout << boost::format("%3% %2% %1%") %"!" %"world" %"hello" << std::endl;

ライブラリリストは以下のサイトに詳しい。

http://boostjp.github.io/libs/libraries.htm

 

参考サイト


ブログの中で文章を囲む方法 [メモ]

他のサイトや文献から文章を引用する場合、引用した部分を囲って分かりやすくしておくのが礼儀となります。

その場合、<div>タグを使うのが一般的な方法のようです。これを使えばstyle属性を指定することでさまざまな線を利用することができます。

例えば以下のタグをhtmlに記述してみます。

<div style="border-style: solid ; border-width: 1px;">枠線で囲まれる本文</div>

枠線で囲まれる本文

 

style属性で、線の種類、枠内の余白、枠線の色、枠内の文字色、枠内の背景色、枠の横幅、枠のコーナーを丸くする、枠に影を付ける、などさまざまに利用できます。

詳細は参考サイトに詳しくあるので割愛します。

 

参考サイト


画像処理・認識 [ウィンドウ] [OpenCV]

「HighGUI」技術

ウィンドウ関連の関数群について

◆ スクリーンに画像を表示する関数

OpenCV 関数名 書式
1.x系 cvNamedWindow int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE )
2.x系 cv::namedWindow void namedWindow(const string& winname, int flags)

◆ ウィンドウハンドルの取得

OpenCV 関数名 書式
1.x系 cvGetWindowHandle void* cvGetWindowHandle( const char* name )
2.x系 cv::GetWindowHandle void* cv::GetWindowHandle(const char* name)

◆ ウィンドウ名を取得

OpenCV 関数名 書式
1.x系 cvGetWindowName const char* cvGetWindowName( void* window_handle )
2.x系 cv::GetWindowName const char* cvGetWindowName(void* windowHandle)

◆ ウィンドウのリサイズ

OpenCV 関数名 書式
1.x系 cvResizeWindow void cvResizeWindow( const char* name, int width, int height )
2.x系 cv::ResizeWindow void cv::ResizeWindow(const char* name, int width, int height)

 

本記事は以下の参考書を元に書いています。


画像処理・認識 [ツールキット] [OpenCV]

「HighGUI」技術

HighGUI (High-level Graphical User Interface) とはOS、ファイルシステム、ハードウェア(カメラ等)とやるとりするライブラリ。ウィンドウを開く、画像を表示する、グラフィック関連ファイルの読書き、さらにマウス、ポインタ、キーボード等のイベント処理を行うことができる。

このライブラリは大きく3つの部分に分けることができる。

① ハードウェア部

主にカメラの操作に関連している。

② ファイルシステム部

主に画像のロードと保存に関連している。

③ ウィンドウシステム部

ウィンドウ関係に関連しており、ウィンドウにかかわるイベント等の処理も行うことができる。

 

本記事は以下の参考書を元に書いています。


Windows 7上にWindows XP環境を構築「共有フォルダ編」 [Windows]

VMwareのメニューから「Player」、「管理」、「仮想マシン設定」を選択する。

image

「仮想マシン設定ダイアログ」から「オプション」タグを選択し、「共有フォルダ」を選択する。
フォルダ共有設定が現れるので「常に有効」をチェックし、「Windowsゲストのネットワークドライブとしてマップする」にチェックを入れること。
image
フォルダの「追加」ボタンが有効化するのでこれを押す。

共有フォルダ追加ウイザード

① ようこそ

image

② ファイルだ名の指定

ホストパスはこの場合、Windows7側のフォルダを指定する。

  • ホストパス: E:\XP共有
  • 名前: XP共有

③ 共有フォルダ属性の指定

image

④ ネットワークドライブが作成される

image

以上


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。