【OpenCV】黒板風処理

少し前にOpenCVで漫画風処理というのが流行りましたが、黒板風の処理をやってみました。

 

処理結果はこんな感じ↓

 

【処理前画像】

【処理後画像】

 

この処理のソースコードはこちら↓になります。

#include "stdafx.h"
#include "opencv2/opencv.hpp"

int main()
{
	// グレースケールで画像の読込
	cv::Mat srcImage = cv::imread("処理前.png", 0);

	// チョークの擦れ感はランダムノイズで
	cv::Mat noise(srcImage.size(), srcImage.type());
	cv::randn(noise, 300, 200);
	// ノイズを少しぼやかす
	cv::GaussianBlur(noise, noise, cv::Size(3, 3), 0.5);

	// チョークの文字( = ノイズ - 元画像)
	cv::Mat letter = noise - srcImage;

	// モノクロデータからカラーデータへ
	cv::Mat colorLetter;
	cv:cvtColor(letter, colorLetter, cv::COLOR_GRAY2BGR);

	// 背景色(黒板)
	cv::Mat backColor(srcImage.size(), CV_8UC3, cv::Scalar(0, 40, 0));

	// 黒板の画像 = 背景色 + 擦れ文字
	cv::Mat blackBoard = backColor + colorLetter;
	cv::imshow("黒板処理", blackBoard);
	
	// 処理結果の保存
	cv::imwrite("黒板処理.png", blackBoard);

	// キー入力待ち
	cv::waitKey();

	return 0;
}

【処理の簡単な解説】

①画像をモノクロで読み込む(imread関数)

この画像は紙に書いた文字をスキャナで読込ました。

 

②チョークの擦れ具合を表現するのに、ノイズ画像(randn関数)を作成し、その画像を少しぼやかす(GaussianBlur関数)

 

③ノイズの画像②から元の画像①を引いて、文字の部分だけを残す

 

④黒板用の画像を作成

 

⑤ ③で作成した文字と④の黒板の画像を足し合わせて完成!

 

かなり簡単にやってみましたが、細かい設定をいじくると、もう少し、それっぽくなるかも?しれません。

 

【余談】

なぜ、黒板の処理をやってみたか?というと、会社の人たちが主にFPGAがテーマのブログ(http://fpgainfo.blog.fc2.com/)を立ち上げたのですが、その中の人が、あまり画像処理を詳しくないのにもかかわらず、フリーのレタッチソフト(GIMP)を使って、こんな↓黒板っぽい処理をやっていた。

 

 

こんなことをやられちゃうと、画像処理魂に火が着いた!

 

この処理は、GIMPにネオン光彩という処理があり、この処理によりチョークの擦れているっぽい処理を行っています。

このネオン光彩の処理はなんとなく、ラプラシアンフィルタっぽかったのですが、OpenCVでラプラシアン処理(Laplacian関数)を行うと、細かい文字がつぶれてしまったので、結局、ノイズを付加する事で、チョークの擦れ具合を表現してみました。

 

最近はOpenCVをあまり触っていなかったのですが、cvtColorの引数の設定など、昔から変わっている部分もあって、いろいろ調べまくりながら作成しました。

 

ブログではOpenCVの関数を明示的にするためにも、using namespace はできるだけ、使わないようにしているのですが、ちょっとクドイので、使っといた方が良かったかも?

 

それにしても、画像間演算は楽だわ~

OpenCV3プログラミングブック

OpenCVプログラミングブックのVer3対応版が出版されました。

 

 

おそらくそんなに内容は変わらないんだろうな~と思いながらも、これまでも購入してきたので買っておいてみたら、いい意味で期待を裏切られる内容でした。

 

これまでのイントール方法から始まりリファレンスマニュアルがメインの内容とは違い、どちらかというとVer2からVer3への移行マニュアルという雰囲気です。

 

さらにOpenCVの処理例も一般的なフィルタ処理の内容は無く、ARや機械学習など、応用例がまとめられています。

逆に言うと、OpenCV初心者が、この本をいきなり手にするのは少々難しく感じると思います。

(この辺の溝を埋めるのが私の役目か??)

 

 

【目次】

1章 イントロダクション

画像処理について/OpenCV/OpenCV3.0/OpenCV2.Xからの移行に関する注意点

2章 OpenCV3.0を利用するための環境構築方法

CMake/公式インストーラ/NuGet/MacPorts/HomeBrew/apt-get install

3章 OpenCV3.0を用いたアプリケーション開発

CMake/Visual Studio

4章 OpenCV3.0を用いたデバッグ方法

5章 コンピュータビジョンにおける三次元幾何

6章 拡張現実感(Augmented Reality:AR)

7章 機械学習による画像認識

8章 プロジェクタカメラシステムープロジェクションマッピング

9章 OpenCVとOpenGLの連携

10章 広視野角HMDのための歪み画像生成

11章 Kinect V2の利用

12章 OpenCL

 

OpenCVへ戻る

Interface 2014年1月号はラズベリーパイxカメラで本格派画像処理

Interface 2014年1月号はラズベリーパイxカメラで本格派画像処理という特集です。

 

 

私もOpenCVの基礎部分の記事をお手伝いさせて頂きました。

 

基礎というより、ライブラリって何?ぐらいの入門レベルなので、OpenCVを使った事のある人はこの記事に期待しないで下さい。

 

それより、他の方の書いたラズベリーパイの部分が面白いと思います。

きっと。。(私も、まだ見てない。)

 

目次

イントロダクション 超小型Linux ×カメラで広がる画像処理マシンの可能性

第1部 ラズベリー・パイで広がるカメラ×画像処理の世界

第1章 はじめてのウェアラブル! スカウター風メガネの製作

Appendix 1 はじめてのカメラ×画像処理に最適! 超定番ボードRaspberry Pi

Appendix 2 感度/発色がすごくいい! ラズベリー・パイ専用カメラ・モジュールの実力

第2部 基礎編:はじめての画像処理

第2章 実験で使うハードとソフト

Appendix 3 Raspberry Piで画像処理を始める準備

第3章 カメラから動画を取り込む

第3部 リアルタイム動画処理にTRY!

Appendix 4 超キホン! 動画像処理の全体像

Appendix 5 画像処理はリアルタイムがうれしい!!

第4章 実験ビフォー・アフタ! リアルタイム画像処理の基本テクニック

第5章 それらしい物体をパッと見つける! リアルタイム色検出

第6章 エア・シャッタ撮影にTRY! リアルタイム動き検出

第7章 ふつうにやるとスゴ重! リアルタイム画像認識テクニック

第8章 LinuxでそこそこすばやくI/Oするテクニック

Appendix 6 画像処理ライブラリOpenCVの基礎知識5

Appendix 7 カメラ・モジュール選択ガイド

 

特設コーナ1:ハード制御のためのLinux入門

第3回 高性能処理のキモ! プログラム実行順序決定のメカニズム

第3回 マルチタスクOSのキモ! タスク切り替えの基本動作

 

特設コーナ2:音声信号処理の世界

第3回 長文聞き取りのためのキー・テクノロジ! 言語モデルを作る

第3回 実験研究:なんと! 人間の聴覚では位相の変化が識別できない

Appendix D-Aコンバータの出力から不要な周波数成分を除去するフィルタの製作

 

特設コーナ3:自作テレビ放送の可能性を探る

第3回 放送に欠かせない動画圧縮入門 MPEG-2から4K向け最新H.265まで!

第3回 実験成功! アマチュア無線バンドを地デジ周波数に戻して映す

Appendix 実録! アマチュア無線の免許申請方法

 

RZマイコン・フォローアップ・コーナ

Linux×アナログ! センシング回路初体験

 

連載記事

第13回 2相ステッピング・モータ・ドライバIC L6470

第2回 なんと! 対象の距離や向きがわからなくても正面画像を得る方法

 

ニュース&レポート&お知らせ

超安全! 閉じたら消える見えないファイルが作れるLinuxカーネル 3.11

新製品Information

わっしょいInterface/組み込みもん/デバッグ

次号予告

 

 

参考文献へ戻る

 

【OpenCV】ステップイン実行でOpenCVのソースを確認する方法

OpenCVは当然ながらオープンソースなので、ソースコードは公開されているのですが、ある特定の関数がOpenCV内部では、どのような処理をしているのか?を確認するのに、いきなりソースコードを眺めても、処理を追うのは、かなり困難かと思います。

 

そんな時には、やはりデバッグ実行しながら処理を追いかけた方が分かりやすいのですが、OpenCVの関数内へステップイン実行する方法を紹介します。

 

まず、確認したい処理のサンプルプログラムを作成し、ステップイン(関数の中身へ移動する)したい関数の行の右端のグレーの部分をクリックするか、ステップインする関数の行を選択してF9ボタンを押し、ブレイクポイント(処理を一時停止する場所)を指定します。

 

すると行の左側へ赤丸印が表示され、デバッグ実行を行うと、この赤丸印までの処理が行われ、一時停止状態となります。

 

 

次にメニューのデバッグステップインと選択するか、F11ボタンを押すと、以下のように初回だけ表示されます。

 

これは、今回の例ではcv::imshowの中身を見ようとしているのですが、この処理に必要なファイルがどこにあるのか?を聞かれます。

 

今回の例ではファイルの種類の部分にmatrix.cppと表示されているので、このファイルがあるフォルダを探し、そのフォルダを指定します。

 

ちなみに、matrix.cppのファイルは \opencv\modules\core\src 内にあります。

 

 

すると、ブレークポイントで指定した行で使われている関数の中へ、処理が移動していきます。

 

引き続きステップイン(F11ボタンを押す)実行を行うと、さらに関数の内部へ、ステップオーバー(F10ボタンを押す)実行を行うと、関数の内部へは行かずに、次の行へと移動します。

 

そうすると、実際に行われている処理の通りに、表示される行が移動していくので、処理の流れを確認し易いかと思います。

 

ちなみに!

今回、確認したかったのはcv::imshowの処理。

 

Windowsでは画像データのメモリの幅が4の倍数バイトとなるように調整しないと正しく表示されないハズにも係わらず、C++インターフェースのcv:Matでは、メモリの幅のバイト数を示すstepの値が、必ずしも4の倍数とならないのが、とても気になっていたんです。

 

そこで、実際にモノクロ8ビット(CV_8UC1)のcv::Matをcv::imshowへ渡し、ステップイン実行してみたところ、モノクロ画像と同じ画素数の24bitのメモリを確保し(このメモリは、幅が4の倍数バイトに調整されている)、cvConvertImage関数が呼ばれ、その内部では、OpenCV内部だけで使われるicvCvt_Gray2BGR_8u_C1C3Rという関数が実行され、8bitグレーの輝度値がR,G,Bの値が同じ、24bitのカラーデータへと変換されて、Win32APIのBitBltで画像が表示されている事が分かりました。

 

つまり、cv::imshowでモノクロの画像を表示する時に関数内部では、モノクロ画像の3倍のメモリが確保され、モノクロからカラーデータへの変換が行われています。

 

って、なんて無駄なんだ~!

この辺はやっぱりIplImageの方が好きなんだよな~

 

OpenCVへ戻る

【OpenCV】スタティックリンクライブラリの使用方法

OpenCVをダウンロードすると、ビルド済みのスタティックリンクライブラリがstaticlibというフォルダ内に格納されているのですが、以前、試した時には、うまく利用する事ができずに、CMakeでビルドしていました。

 

OpenCVをスタティックリンクライブラリでビルドする方法

https://imagingsolution.net/program/opencv/build_opencv231_static_library/

 

再度、OpenCV2.4.6で試してみたところ、以下の方法でスタティックリンクライブラリを使用する事ができました。

 

まず、こちら↓

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/

よりOpenCVをダウンロードします。

 

WindowsのVer.2.4.6の場合はOpenCV-2.4.6.0.exeのファイルをダウンロードします。

 

ダウンロードしたファイルをダブルクリックすると自己解凍されますが、以下、ルートディレクトリ(c:\ )に解凍した場合を想定して説明します。

 

目的のスタティックリンクライブラリは下記フォルダに格納されています。

 

opencv
├build
├x86
│ ├vc9
│ ├vc10
│ │ ├staticlib
│ ├vc11
├x64

 

x86やx64、vc9,vc10,vc11は使用する環境に合わせて使用するフォルダを選択します。

 

まず、C++のプロジェクトを作成し、プロジェクトのプロパティで、構成すべての構成にし、構成のプロパティ→C/C++→全般→追加のインクルードディレクトリにopencv2のあるフォルダ

 

c:\opencv\build\include

 

などを指定します。(ファイルの解凍先によりディレクトリが異なります。)

 

 

次にスタティックリンクライブラリのあるフォルダの設定を行います。

こちらもプロジェクトのプロパティで、構成すべての構成にし、構成のプロパティ→リンカー→全般→追加のライブラリディレクトリ

 

c:\opencv\build\x86\vc10\staticlib

 

などを指定します。(ファイルの解凍先や開発環境によりディレクトリが異なります。)

 

x86・・・32bitプログラムを作成する場合(OSが64bitでも32bitプログラムは作成可能です。)
x64・・・64bitプログラムを作成する場合
(構成マネージャでプラットフォームをx64にするのをお忘れなく。
分からなければ、64bitOSであっても、まずはx86を使用して下さい。)
vc9・・・Visual Studio 2008で開発する場合
vc10・・・Visual Studio 2010で開発する場合
vc11・・・Visual Studio 2012で開発する場合

 

次に特定の規定のライブラリの無視というのを設定するのですが、これはDebugとReleaseで設定が違うので、構成のプロパティ→リンカー→入力→特定の規定のライブラリの無視の設定

 

構成がDebugの場合
Libcmtd.lib;msvcprtd.lib

構成がReleaseの場合
Libcmt.lib;msvcprt.lib

 

と入力します。

 

 

これで、OpenCVを使う準備ができたので、コードを下記のように書きます。

ここでのポイントはcomclt32.libファイルを追加している部分ぐらい。

以下、Canny Edge Detectorのサンプルコードです。

#include "stdafx.h"

//プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに
// opencv2のあるフォルダ(C:\opencv\build\includeなど)を追加のこと
#include "opencv2\opencv.hpp"

#pragma comment(lib,"comctl32.lib")

// バージョン名の取得
#define CV_VERSION_STR CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)

// libファイル名の最後の部分をReleaseとDebugで分ける
#ifdef _DEBUG
#define CV_EXT_STR "d.lib"
#else
#define CV_EXT_STR ".lib"
#endif

//プロジェクトのプロパティ⇒リンカー⇒全般 の追加のライブラリディレクトリに
// libファイルのあるフォルダ(C:\opencv\build\x86\vc10\libなど)を追加のこと
#pragma comment(lib, "opencv_core"	CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "opencv_imgproc"	CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "opencv_highgui"	CV_VERSION_STR CV_EXT_STR)

#pragma comment(lib, "zlib"	CV_EXT_STR)
#pragma comment(lib, "IlmImf"	CV_EXT_STR)
#pragma comment(lib, "libjasper"CV_EXT_STR)
#pragma comment(lib, "libjpeg"	CV_EXT_STR)
#pragma comment(lib, "libpng"	CV_EXT_STR)
#pragma comment(lib, "libtiff"	CV_EXT_STR)

int _tmain(int argc, _TCHAR* argv[])
{
    //画像データの読込
    cv::Mat src_img = cv::imread("lena.jpg", -1);
    if (src_img.empty()){
        return -1;
    }

    //表示ウィンドウの作成
    cv::namedWindow("src");
    cv::namedWindow("dst");

    //処理後画像データ格納用
    cv::Mat dst_img;

    //画像処理例(Canny Edge Detector)
    cv::Canny(src_img, dst_img, 100.0, 150.0);

	//画像の表示
    cv::imshow("src", src_img);
    cv::imshow("dst", dst_img);

	//キー入力待ち
    cv::waitKey (0);

	return 0;
}

(実行結果)

 

サンプルプロジェクトファイルはこちら↓

OpenCVStaticSample.zip

(OpenCV2.4.6 + Visual Studio 2010 C++ Expressのサンプルです)

 

スタティックリンクライブラリを使うと、Pathの設定が無いので、ちょっと楽!

 

OpenCVへ戻る

OpenCV2.4.3が公開されました

2012.11.2 OpenCV2.4.3が公開されました。

 

ちょっとの間だけOpenCV2.4.3RCというバージョンも公開されていたのですが、早々に正式版となりました。

 

OpenCV2.4.3(Windows版)の入手先はこちら↓

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.3/

 

変更内容についてはこちら↓

http://code.opencv.org/projects/opencv/wiki/ChangeLog

 

ちなみに、次のバージョンのOpoenCV2.4.4は3月の公開予定という事で、しばらくはこのOpenCV2.4.3の状態が続きそうです。

(参考)

http://code.opencv.org/projects/opencv/roadmap

 

The OpenCV Tutorials Release 2.4.3

http://docs.opencv.org/opencv_tutorials.pdf

The OpenCV User Guide Release 2.4.3

http://docs.opencv.org/opencv_user.pdf

 

詳細はまだ、確認していないのですが、バイナリ版ではVS11版(Visual Studio 2012版)はなく、VS9、VS10のみでした。CMakeはできるのかな??

これから、もろもろ評価予定。

 

評価中メモ

  • Visual Studio 2012(VS11)でOpenCVをビルドする事は可能
  • WITH_CUDA(CUDA5.0)でVS11でビルドしようとすると

    エラー    1    error : nvcc cannot find a supported cl version. Only MSVC 9.0 and MSVC 10.0 are supported    C:\OpenCV2.4.3\user_buid_with_cuda50_VS11\modules\core\nvcc    opencv_core

    というエラーが出る。
    →VS10でビルドすると大丈夫

【OpenCV】輪郭付文字の描画

OpenCVでモノクロの画像(8bit1ch)の上に文字を書こうとすると、文字列の色にカラーを指定できない事から、文字を何色で描画しようとも、どうしても文字が見づらくなってしまいます。

 

(コード例)

char text[64] = "Imaging Solution";

CvFont font;

// 文字のフォント
cvInitFont (&font, CV_FONT_HERSHEY_DUPLEX, 0.7, 1.0, 0, 2);

// 文字の描画
cvPutText (src, text, cvPoint (15, 30), &font, CV_RGB (0, 0, 0));

 

(文字列の表示例)

 

文字を見えやすくするには、背景を塗りつぶすとか、文字に縁取りを付けるとか、考えられますが、割と単純な発想ですが、太めのフォント文字列を描画して、同じ場所に細めのフォントで同じ文字を描画すると、文字に輪郭が付くんじゃないか?という事でやってみた例↓

 

(コード例)

char text[64] = "Imaging Solution";

CvFont font;
CvFont outline_font;

// 輪郭用のフォント(太めのフォント)
cvInitFont (&outline_font, CV_FONT_HERSHEY_DUPLEX, 0.7, 1.0, 0, 8);
// 文字のフォント
cvInitFont (&font, CV_FONT_HERSHEY_DUPLEX, 0.7, 1.0, 0, 2);

// 輪郭の描画
cvPutText (src, text, cvPoint (15, 30), &outline_font, CV_RGB (255, 255, 255));
// 文字の描画
cvPutText (src, text, cvPoint (15, 30), &font, CV_RGB (0, 0, 0));

 

(文字列の表示例)

 

と、小ネタでした。

OpenCV2.4.1が公開されました

2012.6.2 OpencV2.4.1が公開されました。

 

OpenCV2.4.1のWindows版の入手先はこちら

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.1/

 

OpenCV.2.4からOpenCV2.4.1への変更点はこちらを参照下さい。

http://code.opencv.org/projects/opencv/wiki/ChangeLog#241

日本語はこちらより

http://opencv.jp/opencv2-x-tips/changelog_from_240

 

今回の変更では、ライブラリの構成的には変更が無いので、インストール方法についてはOpenCV2.4のインストール方法を参考にlibファイルのファイル名の240の部分を241に読み替えて参考にして下さい。

 

ちなみに、今回はOpenCV2.4の公開から約1ヶ月という短い期間でOpenCV2.4.1の公開となった訳ですが、今後も約1ヶ月間ペースでのバージョンアップが予定されています。

バージョンアップの予定についてはロードマップとして公開さているので参考まで↓

http://code.opencv.org/projects/opencv/roadmap

 

OpenCV2.4の入手、ダウンロード、インストール、環境設定

2013年3月現在、OpenCVの最新バージョンはVer.2.4.4です。
OpenCV2.4.4のダウンロードは下記ページより入手して下さい。

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.4/

 

また、インストール方法はlibファイルのxxx240.lib,xxx240d.libの部分をxxx244.lib,xxx244d.libに読み替えて下さい。

 

下記はVer.2.4.0の説明です。


 

2012.5.1 OpenCV2.4の正式版が公開されました。

 

OpenCV2.3.1からの変更点は下記リンク先よりご確認下さい。

 

http://code.opencv.org/projects/opencv/wiki/ChangeLog#New-functionality

 

日本語版は下記を参照下さい。

 

OpenCV2.3.1→OpenCV2.4betaへの変更点

http://opencv.jp/opencv2-x-tips/changelog_from_231

 

OpenCV2.4beta→OpenCV2.4への変更点

http://opencv.jp/opencv2-x-tips/changelog_from_24beta

 

インストール上で気になるポイントは

●SURFおよびSIFT処理の特許が申請されている処理アルゴリズムは別のモジュール(opencv_nonfree240.dll)へ移動

●OpenCVで使用している並列化ライブラリ(TBB)がOpenCVのパッケージに同梱
注)Release版のTBBのみ、Debug実行する場合は別途TBBを入手する必要があります。

ぐらいでしょうか。

 

以下、Windows版のインストール方法について記します。

 

OpenCV2.4の入手、ダウンロード先

OpenCVの入手は下記ページよりダウンロードして下さい。

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.0/

上記リンク先へ行き、OpenCV-2.4.0.exeをクリックしてファイルをダウンロードして下さい。

 

OpenCV2.4のインストール方法

ダウンロードしたファイル(OpenCV-2.4.0.exe)をダブルクリックすると、ファイルの解凍が始まるので、ここでは c:\ に解凍する事にします。(慣れている人はどこでも構いません。)
Extract to:の部分に c:\ と入力して下さい。

 

 

ファイルを解凍すると、主な構成は下記のようになっています。

 

c:\opencv
┣ 3rdparty
┣ android
┣ build
┃┣ common
┃┃ ┗tbb
┃┃      ┣ ia32
┃┃      ┗ intel64
┃┣ gpu
┃┣ include
┃┣ python
┃┣ x64
┃┃ ┣mingw
┃┃ ┣vc9
┃┃ ┗vc10
┃┗ x86
┃  ┣mingw
┃  ┣vc9
┃  ┗vc10
┃   ┣bin
┃   ┣lib
┃   ┗staticlib
┣ data
┣ doc
┣ include
┣ module
┗ samples

 

次にダウンロードしたdllファイルをPCから使えるようにPathの設定というのを行います。

 

Pathの設定はWindowsのスタートボタンをクリック → コンピュータ右クリックプ ロパティをクリックします。

 

 

開いたウィンドウの システムの詳細設定 をク リックします。

 

 

次に詳細設定タブの環境変数のボ タンをクリックします。

 

 

次にシステム環境変数のPathを選択し、編集をクリックします。

 

 

変数値のテキストボックスの最後の部分に、OpenCVのdllファイルのあるフォルダを指定します。

 

また、別途OpenCVからTBBというライブラリも使用するので、この2つのPathを設定します。

 

32bitプログラムでVisualStudio2010を使用する場合は

 

;C:\opencv\build\x86\vc10\bin;C:\opencv\build\common\tbb\ia32\vc10

 

※もともとあった文字は消さないようにご注意ください。
最初の ; (セミコロン)を付けるのもお忘れなく。
PATHの設定後、PCを再起動して下さい。(ログオフ⇒ログインでも可)

 

別の環境にOpenCVをインストールする場合は下記の表を参考に
使用する環境に合わせてディレクトリを指定して下さい。

 

32bit、Visual Studio2008の場合 ;C:\opencv\build\x86\vc9\bin;C:\opencv\build\common\tbb\ia32\vc9
32bit、Visual Studio2010の場合 C:\opencv\build\x86\vc10\bin;C:\opencv\build\common\tbb\ia32\vc10
64bit、Visual Studio2008の場合 C:\opencv\build\x64\vc9\bin;C:\opencv\build\common\tbb\intel64\vc9
64bit、Visual Studio2010の場合 C:\opencv\build\x64\vc10\bin;C:\opencv\build\common\tbb\intel64\vc10

 

ただし、同梱されているTBBはRelease版のみのため、Debug実行すると

 

コンピュータにtbb_debug.dllが無いため・・・

 

と表示されてしまします。

Debug実行も行う場合は、別途TBBをこちら

http://threadingbuildingblocks.org/file.php?fid=77

 

のページの最新版をクリックし、Windowsの場合は tbb×××_win.zipのファイルをダウンロードし、解凍したdllファイルを上記で指定したフォルダの中へコピーして下さい。

 

64bitOSを使っていても32bitでプログラムする場合は x86 フォルダ内のbinディレクトリを指定して下さい。
64bitを使う場合は、VisualStudioのプラットフォームをx64にして下さい。

(Visual Studioの上の方(メニューの下)に表示されているWin32の部分をx64にして下さい。)

 

なんだか良く分からない場合は、OSが64bitであっても、32bit版のOpenCVを使った方がハマりにくいと思います。

 

VisualStudio2010での使用方法

使用するのはVisualStudio C++ 2010 Express以上のエディションで大丈夫です。

 

VisualStudio2010を起動し、新しいプロジェクトをクリックし、左側のメニューのWin32を選択した状態でWin32コンソールアプリケーションをクリックします。

 

適当な名前を付け、保存する場所を指定し、OKボタンをクリックします。

 

すると下記のようなソースコードが表示されます。

// OpenCV2.4Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}

 

次にOpenCVのヘッダファイルが、今回作成したプロジェクトから参照できるように設定を行います。

 

プロジェクトの名前の部分を右クリックし、メニューのプロパティを選択します。

 

表示されたウィンドウ左上の構成を全ての構成にし、構成のプロパティ⇒C/C++⇒全般を選択して、OpenCV2のフォルダのあるディレクトリ(C:\opencv\build\include)を追加のインクルードディレクトリに指定します。

 

 

以上の設定を行い、ソース部分を下記のようにすると、ガウシアンフィルタ処理を行う簡単なサンプルプログラムが実行できると思います。

// OpenCV2.4Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

//プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに
// opencv2のあるフォルダ『C:\OpenCV\include』などを追加のこと
#include "opencv2\opencv.hpp"

#ifdef _DEBUG
    //Debugモードの場合
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts240d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video240d.lib")
#else
    //Releaseモードの場合
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts240.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video240.lib")
#endif

int _tmain(int argc, _TCHAR* argv[])
{

    //画像データの読込
    IplImage* src_img = cvLoadImage("C:\\opencv\\samples\\c\\lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
    if (src_img == NULL){
        return 0;
    }

    //表示ウィンドウの作成
    cvNamedWindow("src");
    cvNamedWindow("dst");

    //処理後画像データの確保
    IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels);

    //画像処理例(ガウシアンフィルタ)
    cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9);

    //画像の表示
    cvShowImage ("src", src_img);
    cvShowImage ("dst", dst_img);

    //キー入力待ち
    cvWaitKey (0);

    //全てのウィンドウの削除
    cvDestroyAllWindows();

    //画像データの解放
    cvReleaseImage(&src_img);
    cvReleaseImage(&dst_img);

    return 0;
}

上記サンプルは32bitでVisualStudio2010で開発する場合の設定です。
環境が異なる場合は #pragma comment の部分のパスを環境に合わせて変更して下さい。

 

ちなみに、libファイルは全て必要ではなく、おおむね

 

opencv_core240、opencv_imgproc240、opencv_highgui240、opencv_objdetect240

 

の4種類ぐらいである程度動作すると思います。(使用する関数によって必要なlibファイルが決まります。)

 

SIFTもしくはSURFを使用する場合は、別途、

 

Releaseの場合:opencv_nonfree240.lib

Debugの場合  :opencv_nonfree240d.lib

 

が必要となります。

 

また、libファイルのファイル名に含まれる数字部分がOpenCVのバージョンを示し、ファイル名の最後についているdの文字がDebug用のlibファイル、dの無いファイルがRelease用のlibファイルとなっています。

 

その他

VisualStudio2005でOpenCV2.4を使用する場合は自分でOpenCV2.4をコンパイルするか、
VisualStudio2008用のライブラリを使用する場合は
Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
VisualStudio2010用のライブラリを使用する場合は
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)

 

が必要となります。ただし、VisualStudio2005からはReleaseモードのみ実行可能なので、Debugモードでも実行したい場合はExpress Editionでも構わないのでVisualStudioをインストールすると実行可能です。

 

OpenCV2.4でCMakeを使って自分でOpenCVをコンパイルする場合は、OpenCV2.3の場合の説明ですが、下記ページを参照下さい。

 

https://imagingsolution.net/program/opencv/opencv2-3/opencv2-3-downlaod-install/#compile-opencv

 

基本的にOpenCVなどのライブラリを使う場合は、ライブラリの3点セット(*.dll、*.lib、*.h)をいかに使うか?がポイントになります。

 

余裕のある方は下記ページも参考にしてみて下さい。

 

ライブラリの使用方法、VisualStudioの設定方法

 

トラブルシューティング

●「コンピュータにopencv_core240d.dllがないため、プログラムを開始できません。・・・」と表示される。

 

 

このエラーメッセージはdllの参照設定が正しくできていない可能性があります。
Pathの設定を確認し、設定したらPCの再起動をしてみて下さい。
コンピュータにtbb_debug.dllが無いため・・・と表示されている場合はTBBのライブラリ(*.dll)のdebug版のファイルを入手し、指定したPathへdllファイルが入っているか?Pathの設定が正しいか?deご確認下さい。

 

error LNK2019: 未解決の外部シンボル・・・と表示される。

この未解決のシンボルのエラーの場合、libファイルの設定が不足している場合が考えられます。

 

libファイルの参照設定が正しいか?(本記事では、ソースコード中に記載した#pragma commentの部分)をご確認下さい。

 

fatal error C1083: include ファイルを開けません。と表示される。

ヘッダファイルの参照設定が正しくない可能性があります。

 

プロジェクトのプロパティで構成のプロパティC/C++全般を選択して、OpenCV2のフォルダのあるディレクトリ(C:\opencv\build\include)を追加のインクルードディレクトリに指定しているか?ご確認下さい。※includeというフォルダが2か所あるのでご注意下さい。

 

Visual Studio Expressで64bit対応するには?

Expressでは標準的には64bitプログラムを作成することはできないようです。
ただし、SDKインストールすることで可能という情報もあるので、試してみては如何でしょうか?

方法 : Visual C++ プロジェクトを 64 ビット プラットフォーム用に設定する

 

OpenCVへ戻る

OpenCV2.4Betaが公開されました。

2012.5.1 OpenCV2.4の正式版となりました。
2012.4.13 OpenCV2.4Beta2となりました。
2012.4.3 0:30頃? OpenCV2.4Betaが公開されました。

OpenCV2.4Betaの入手先は

 

【Windowsの場合】

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.0/

【Unixの場合】

http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.0/

 

今回の変更内容はこちら

http://code.opencv.org/projects/opencv/wiki/ChangeLog#New-functionality

 

【マニュアル類】
●リファレンスマニュアル(http://opencv.itseez.com/opencv2refman.pdf)
●ユーザーガイド(http://opencv.itseez.com/opencv_user.pdf)
●チュートリアル(http://opencv.itseez.com/opencv_tutorials.pdf)

 

Cannyやfindcontourがカラーに対応したとのこと。

findcontourの例↓

findcontourの場合はカラーで二値化した場合の事らしい。

Cannyのカラー対応って?と思ったら、処理結果はモノクロで出力されます。

 

まだ、詳細を見ていませんが、今回は新しい構成にopencv_nonfree、opencv_photo、opencv_videostabなる物が追加されています。

 

opencv_nonfreeには特許の取られている処理アルゴリズムのSIFTとSURFがこちらの構成に入れられたので、必要ない時はこのdllを使わなければいいので、特許の心配は無くなりました?って言っていいのだろうか?他にも無いか?ちょっと心配...

 

必要なモジュールはCMakeの時に選択できるようになりました。

 

 

過去の例で言うと、Betaと付いた場合は比較的早く新しいバージョンが公開されるので、人柱になるつもりが無ければ今のところは使わなくていいと思います。

 

今回のOpencV2.4Betaでは、サンプル画像の中に基盤の絵があったり、何やら工業用途で使えるようになるような期待感が...

 

評価中メモ

※メモなので、下記内容に信憑性はありません。



●GPU処理はCUDA4.1が必要


●cv::imread(ファイル名)で画像が読み込めない。(cv::Matにデータが入らない)
とりあえず、こんな感じ↓で回避中
cv::Ptr src = cvLoadImage(“Lenna.bmp”, ・・・・・・
cv::Mat img(src);


●cv::namedWindowのタイトルの文字が文字化けする


●カメラ制御用のenumが増えている。しかもちゃんと使えるっぽい。これでOpenCVからカメラの制御ができるかも?
CV_CAP_PROP_ZOOM =27,
CV_CAP_PROP_FOCUS =28,
CV_CAP_PROP_GUID =29,
CV_CAP_PROP_ISO_SPEED =30,
CV_CAP_PROP_MAX_DC1394 =31,
CV_CAP_PROP_BACKLIGHT =32,
CV_CAP_PROP_PAN =33,
CV_CAP_PROP_TILT =34,
CV_CAP_PROP_ROLL =35,
CV_CAP_PROP_IRIS =36,
CV_CAP_PROP_SETTINGS =37,

C#(.NET)からOpenCVを使う方法、OpenCvSharpのインストール方法

OpenCVはシンプルな画像表示用のウィンドウも用意されているので、簡単に画像処理を試したい場合には非常に良いのですが、少し凝ったウィンドウを作成しようとすると、やっぱり.NETからOpenCVを触りたくなります。

 

.NETの言語(VB.NET、C#、C++/CLI)からOpenCVを使う方法は、だいたい以下の通り

  • .NETのラッパーライブラリを使う
  • 自作でラッパーライブラリを作成する
  • C++/CLIから直接使う

となりますが、実質的にはOpenCvSharpを使う事になると思います。

 

OpenCvSharpのインストール方法は、現在ではNuGetによりプロジェクトごとにインストールします。

 

OpenCvSharpのインストール方法

まず、インストールするC#プロジェクトを用意します。

新規でC#プロジェクトを作成する場合は、次のように行います。

Visual Studio を起動後、新しいプロジェクトの作成をクリックします。

次に Windowsフォームアプリケーション(.NET FRamework)を選択し、次へをクリックします。

プロジェクト名、場所を指定し、作成をクリックします。

これで、以下のようにフォームが表示されたらベースとなるC#プロジェクトが作成されています。

 

次に、このC#プロジェクトにNuGetでOpenCvSharpをインストールします。

メニューのプロジェクト→NuGetパッケージの管理をクリックします。

表示された画面で、 参照 を選択し、その下のテキストボックスに OpenCvSharp と入力すると、OpenCvSharpの一覧が表示されるので、この中から OpenCvSharp.Windows を選択します。

OpenCvSharp.Windows を選択すると、右側に インストール ボタンが表示されるので、これをクリックします。

しばらくすると、インストールが完了します。

OpenCvSharpがインストールされたか?確認するには、プロジェクトの参照の部分の表示を展開すると、OpenCvSharpの名前空間が表示されている事を確認します。

簡単にOpenCvSharpの動作を確認します。

ツールボックスの中から Button を選択し、フォーム上にドラッグ&ドロップします。

ボタンをダブルクリックし、C#コードを表示し、上の方に、

using OpenCvSharp;

と入力し、ボタンイベントの部分に以下のように記載します。

private void button1_Click(object sender, EventArgs e)
{
    var img = new Mat(new OpenCvSharp.Size(256, 256), MatType.CV_8UC3, new Scalar(35, 123, 254));

    Cv2.ImShow("Image", img);
}

参考までに、Formの全コードを示します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using OpenCvSharp;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var img = new Mat(new OpenCvSharp.Size(256, 256), MatType.CV_8UC3, new Scalar(35, 123, 254));
            Cv2.ImShow("Image", img);
        }
    }
}

この状態で、▶開始 ボタンをクリックし、以下のように表示されれば OpenCvSharp のインストールは成功しています。

 

OpenCvSharpを使うポイント

2021年現在、OpenCVの情報はPythonであふれているので、OpenCvSharpの情報を探すのは難しくなってきています。

OpenCvSharpの情報を入手するには、少し古くなりましたが、作者であるSchimaさんのページを参照することをお勧めします。

http://schima.hatenablog.com/archive/category/OpenCvSharp

リファレンスは英語になりますが、こちらです。

http://shimat.github.io/opencvsharp/api/OpenCvSharp.html

 

あとは、OpenCvSharpは基本的にOpenCVのC++版のラッパーライブラリであるため、OpenCVのC++の情報を検索し、OpenCvSharpでは、どうするのか?を推測するのもイイかと思います。

 

参考

https://github.com/shimat/opencvsharp

http://shimat.github.io/opencvsharp/api/OpenCvSharp.html

OpenCVへ戻る

OpenCV2.3.1の入手、ダウンロード、インストール、環境設定

2012.5現在、OpenCVの最新バージョンはVer2.4です。
こちらのインストール方法についてはOpenCV2.4の入手、ダウンロード、インストール、環境設定を参照願います。


OpenCV2.3.1の入手、ダウンロード先

OpenCVの入手は下記ページよりダウンロードして下さい。

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/

 

上記リンク先へ行き、OpenCV-2.3.1-win-superpack.exeをクリックしてファイルをダウンロードして下さい。

 

OpenCV2.3.1のインストール方法

ダウンロードしたファイル(OpenCV-2.3.1-win-superpack.exe)をダブルクリックすると、ファイルの解凍が始まるので、ここでは c:\ に解凍する事にします。(慣れている人はどこでも構いません。)
Extract to:の部分に  c:\ と入力して下さい。

 

 

ファイルを解凍すると、主な構成は下記のようになっています。

c:\opencv
┣ 3rdparty
┣ android
┣ build
┃┣ common
┃┣ gpu
┃┣ include
┃┣ python
┃┣ x64
┃┃ ┣mingw
┃┃ ┣vc9
┃┃ ┗vc10
┃┗ x86
┃  ┣mingw
┃  ┣vc9
┃  ┗vc10
┃   ┣bin
┃   ┣lib
┃   ┗staticlib
┣ data
┣ doc
┣ include
┣ module
┗ samples

 

次にダウンロードしたdllファイルをPCから使えるようにPathの設定というのを行います。

 

Pathの設定はWindowsのスタートボタンをクリック → コンピュータ右クリックプ ロパティをクリックします。

 

 

開いたウィンドウの システムの詳細設定 をク リックします。

 

 

次に詳細設定タブの環境変数のボ タンをクリックします。

 

 

次にシステム環境変数のPathを選択し、編集をクリックします。

 

 

変数値のテキストボックスの最後の部分に、OpenCVのdllファイルのあるフォルダを指定します。

 

;C:\opencv\build\x86\vc10\bin

 

※もともとあった文字は消さないようにご注意ください。
最初の ; (セミコロン)を付けるのもお忘れなく。
PATHの設定後、PCを再起動して下さい。(ログオフ⇒ログインでも可)

 

上記の設定は32bitOSでVisual Studio2010を使う場合の設定です。
使用する環境に合わせてディレクトリを指定して下さい。

 

32bit、Visual Studio2008の場合 C:\opencv\build\x86\vc9\bin
32bit、Visual Studio2010の場合 C:\opencv\build\x86\vc10\bin
64bit、Visual Studio2008の場合 C:\opencv\build\x64\vc9\bin
64bit、Visual Studio2010の場合 C:\opencv\build\x64\vc10\bin

 

64bitOSを使っていても32bitでプログラムする場合は x86 フォルダ内のbinディレクトリを指定して下さい。
64bitを使う場合は、VisualStudioのプラットフォームをx64にして下さい。

 

TBBの入手、ダウンロード

OpenCV2.3.1のバイナリ版(コンパイルされているdll)を使う場合は、TBB(Intel Threading Building Blocks)という並列処理用のライブラリが必要となります。
OpenCVをダウンロードすると \opencv\build\common\tbb のフォルダにTBBのdllが入っているのですが、debug版が不足してます。

 

そのため、TBBのライブラリを入手します。

 

入手先
http://threadingbuildingblocks.org/

上記リンクのページへ行き、上側のメニューのDownloads⇒ページ中央部のStable Releaseと移動し、最新のバージョンのTBBをクリックします。(2012年1月現在、tbb40_20111130oss

 

次にWindows版のDownloadボタンをクリックし、ファイルをダウンロードします。
Windows版の場合、tbb40_20111130oss_win.zip

 

ダウンロードしたファイルを解凍すると下記のようなフォルダ構成になっています。
\tbb40_20111130oss_win\tbb40_20111130oss
┣ bin
┃┣ ia32
┃┃ ┣vc8
┃┃ ┣vc9
┃┃ ┗vc10
┃┗ intel64
┣ doc
┣ examples
┣ include
┗ lib

 

そこで、今回は32bitOSでVisualStudio2010を使う事を想定しているので、
フォルダ(\tbb40_20111130oss_win\tbb40_20111130oss\bin\ia32\vc10)内にあるdllファイル

 

tbb.dll、tbb_debug.dll、tbb_preview.dll、tbb_preview_debug.dll、tbbmalloc.dll、tbbmalloc_debug.dll、tbbmalloc_proxy.dll、tbbmalloc_proxy_debug.dll

 

を全てOpenCVのbinフォルダ(C:\opencv\build\x86\vc10\bin)へコピーして下さい。
32bit/64bit、VisualStudioのバージョンによりフォルダが異なるので、環境に合わせてフォルダを選択して下さい。

 

これで、OpenCVの設定は完了です。

 

VisualStudio2010での使用方法

使用するのはVisualStudio C++ 2010 Express以上のエディションで大丈夫です。

 

VisualStudio2010を起動し、新しいプロジェクトをクリックし、左側のメニューのWin32を選択した状態でWin32コンソールアプリケーションをクリックします。

 

 

適当な名前(上図ではOpenCV2.3.1Sample)を付け、保存する場所を指定し、OKボタンをクリックします。

 

すると下記のようなソースコードが表示されます。

 

// OpenCV2.3.1Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}

 

次にOpenCVのヘッダファイルが、今回作成したプロジェクトから参照できるように設定を行います。

 

プロジェクトの名前の部分を右クリックし、プロパティを選択します。

 

 

表示されたウィンドウ右上の構成を全ての構成にし、構成のプロパティ⇒C/C++⇒全般を選択して、OpenCV2のフォルダのあるディレクトリ(C:\opencv\build\include)を追加のインクルードディレクトリに指定します。

 

 

以上の設定を行い、ソース部分を下記のようにすると、ガウシアンフィルタ処理を行う簡単なサンプルプログラムが実行できると思います。

 


// OpenCV2.3.1Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

//プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに
// opencv2のあるフォルダ『C:\OpenCV\include』などを追加のこと
#include "opencv2\opencv.hpp"

#ifdef _DEBUG
    //Debugモードの場合
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts231d.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video231d.lib")
#else
    //Releaseモードの場合
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_core231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_flann231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_ts231.lib")
    #pragma comment(lib,"C:\\opencv\\build\\x86\\vc10\\lib\\opencv_video231.lib")
#endif

int _tmain(int argc, _TCHAR* argv[])
{

    //画像データの読込
    IplImage* src_img = cvLoadImage("C:\\opencv\\samples\\c\\lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
    if (src_img == NULL){
        return 0;
    }

    //表示ウィンドウの作成
    cvNamedWindow("src");
    cvNamedWindow("dst");

    //処理後画像データの確保
    IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels);

    //画像処理例(ガウシアンフィルタ)
    cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9);

    //画像の表示
    cvShowImage ("src", src_img);
    cvShowImage ("dst", dst_img);

    //キー入力待ち
    cvWaitKey (0);

    //全てのウィンドウの削除
    cvDestroyAllWindows();

    //画像データの解放
    cvReleaseImage(&src_img);
    cvReleaseImage(&dst_img);

    return 0;
}

 

ちなみに、libファイルは全て必要ではなく、おおむね

 

opencv_core231、opencv_imgproc231、opencv_highgui231、opencv_objdetect231

 

の4種類ぐらいである程度動作すると思います。(使用する関数によって必要なlibファイルが決まります。)

 

また、libファイルのファイル名に含まれる数字部分がOpenCVのバージョンを示し、ファイル名の最後についているdの文字がDebug用のlibファイル、dの無いファイルがRelease用のlibファイルとなっています。

 

その他

OpenCV2.3.1においてもCMakeを使って自分でOpenCVをコンパイルする事が可能です。

 

CMakeのソースコードにはOpenCV-2.3.1-win-superpack.exeを解凍したフォルダ(opencv)を指定して下さい。

 

OpenCV2.3の場合の説明ですが、詳細は下記ページを参照下さい。

 

https://imagingsolution.net/program/opencv/opencv2-3/opencv2-3-downlaod-install/#compile-opencv

 

基本的にOpenCVなどのライブラリを使う場合は、ライブラリの3点セット(*.dll、*.lib、*.h)をいかに使うか?がポイントになります。

 

余裕のある方は下記ページも参考にしてみて下さい。

ライブラリの使用方法、VisualStudioの設定方法

 

これを覚えておくと、OpenCVがバージョンアップした場合や他のライブラリを使う場合など、応用ができると思います。
 

OpenCVへ戻る

 

【OpenCV】バイラテラルフィルタ(cvSmooth,CV_BILATERAL)

OpenCVでバイラテラルフィルタを行う場合はcvSmooth関数の第3引数にCV_BILATERALを指定すればよいのですが、OpenCV.jpのページなどを見ても、なぜか、それらしい処理結果になっているサンプルをあまり見かけません。

 

cvSmoothの定義は

 

void cvSmooth(
         const CvArr* src,
         CvArr* dst,
         int smoothtype = CV_GAUSSIAN,
         int param1 = 3,
         int param2 = 0,
         double param3 = 0,
         double param4 = 0
);

 

で、バイラテラルフィルタの場合、

param1 アパーチャサイズ
param2 アパーチャサイズ
param3 空間領域のシグマ
param4 色領域のシグマ

 

ただし、

インプレースモード 非対応
チャンネル数 1,3
srcの深度 8
dstの深度 8

 

となっています。

 

そこで、param3、param4を変えながら、処理結果の比較をしてみました。

 

【入力画像】

 

【処理画像】

cvSmooth(src, dst, CV_BILATERAL, 11, 11, param3, param4);

(param3, param4) = (0, 0) (50, 0) (100, 0)
(0, 50) (50, 50) (100, 50)
 
(0, 100) (50, 100) (100, 100)

 

という事で、今回使用した画像では

cvSmooth(src, dst, CV_BILATERAL, 11, 11, 50, 100);

としたときが、いかにもバイラテラルフィルタっぽいでしょうか?

param4を少し大きめにした方が良さそうです。

逆にparam1, param2の値を大きくすると、処理時間がやたらとかかるので、あまり大きくできません。

 

OpenCVへ戻る

 

USBカメラ比較

最近フルHDサイズのUSBカメラ Logicool C910 (現行モデルはC920)を購入したのですが、このカメラを使ってOpenCV2.3.1で撮影すると、難なくキレイな画像が撮影できました。

(以前のバージョンのOpenCVでは画像サイズ4:3の縛りがあって、撮影できなかったのですが...)

 

このカメラの画像が想像以上にキレイだったので、手持ちのUSBカメラの画像比較してみました。

撮影条件は下の写真のようにほぼ同様の条件にしました。

 

今回比較に用いたUSBカメラは

  • BUFFALO BWC-30L01
  • Logicool Qcam Fusion
  • Logicool C910

の3つ。

 

それぞれカメラの最大画素数で撮影してみました。(写真をクリックすると等倍で表示されます。)

 

  • BUFFALO BWC-30L01  (640×480)

 

  • Logicool Qcam Fusion (1280×960)

 

  • Logicool C910 (2592×1944)
    ※投稿できるファイル容量の限界を超えたため、jpgファイルで公開しています。

 

これまでUSBカメラでの画像を本気で画像処理に使う気はしなかったのですが、ここまでキレイだと、そこそこイケちゃうかも?

 

 

 

OpenCV-2.3.2-GPU-demo-pack-win32を試す

久々の投稿ですがSourceforgのOpenCVのページにGPUデモのプログラムが公開されていました。

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/

 

バージョンもOpenCV2.3.2 って、まだ公開されていないのに...

 

で早速、このファイルをダウンロードし、試してみました。

私の環境は

OS:Windows7 64bit (ただし、サンプルは32bit動作)

CPU:Core i7 870 (2.93GHz)

GPU:NVIDIA GeForce GTX470

 

で、パフォーマンス評価用のサンプル(demo_performance.exe)を実行した時の結果がこちら↓

CPU msec   GPU msec   SPEEDUP   DESCRIPTION
matchTemplate
480 5 x86.5 src 3000, templ 5, 32F, CCORR
545 21 x24.9  src 3000, templ 25, 32F, CCORR
792 31 x25.4  src 3000, templ 5, 32F, CCORR
minMaxLoc
7  1  x4.81  src 2000, 32F, no mask
28  2  x14.3  src 4000, 32F, no mask
 106  3  x28.2  src 8000, 32F, no mask
 remap   
 8  0  x35.9  src 1000,8UC1
 30  0  x50.6  src 2000,8UC1
 124  2  x59.1  src 4000,8UC1
 12  0  x32.2  src 1000,8UC3
 42  1  x34.6  src 2000,8UC3
 164  4  x34.7  src 4000,8UC3
 11  0  x37.8  src 1000,8UC4
 40  0  x41.4  src 2000,8UC4
 156  3  x43.7  src 4000,8UC4
 29  0  x79.7  src 1000,16SC3
 117  1  x88.8  src 2000,16SC3
 481  4  x98.1  src 4000,16SC3
 dft   
 107  3  x29.2  size 1000, 32FC2, complex-to complex
 402 8  x45.3  size 2000, 32FC2, complex-to complex
 1781  32  x55.4  size 4000, 32FC2, complex-to complex
 cornerHarris
 129  19  x6.55  size 2000, 32F
 499  70  x7.06  size 4000, 32F
 integral
28 15 x1.82  size 4000, 8U
20 9 x2.04  size 4000, 8U
20 9 x2.11  size 4000, 8U
21 9 x2.2  size 4000, 8U
21 9 x2.15  size 4000, 8U
norm
139 5 x27.3 size 2000, 32FC4, NORM_INF
310 8 x35.2 size 3000, 32FC4, NORM_INF
555 14 x38.2 size 4000, 32FC4, NORM_INF
meanShift
304 8 x36.3  size 400, 8UC3 vs 8UC4
1187 29 x40.2  size 800, 8UC3 vs 8UC4
SURF
5179 117 x43.9
BruteForceMatcher
1230 8 x144 match
1257 9 x136 knnMatch, 2
1301 9 x139 knnMatch, 3
1220 9 x135 radiusMatch
magnitude
41 0 x86 size 2000
88 1 x85 size 3000
162 1 x95 size 4000
add
10 0 x20.1 size 2000, 32F
22 1 x21.4 size 3000, 32F
41 1 x23.9 size 4000, 32F
log
25 0 x55.8 size 2000, 32F
54 0 x66.1 size 3000, 32F
97 1 x71.3 size 4000, 32F
exp
25 0 x53 size 2000, 32F
58 0 x73.7 size 3000, 32F
10 1 x74.6 size 4000, 32F
mulSpectrums
24 0 x53 size 2000, 32F
58 0 x73.7 size 3000, 32F
101 1 x74.6 size 4000, 32F
resize
7 0 x33.5 size 1000, 8UC1, up
28 0 x50.4 size 2000, 8UC1, up
64 1 x53.3 size 3000, 8UC1, up
2 0 x26.6 size 1000, 8UC1, down
8 0 x51.6 size 2000, 8UC1, down
18 0 x94.6 size 3000, 8UC1, down
21 2 x8.5 size 1000, 8UC3, up
82 8 x10.2 size 2000, 8UC3, up
187 17 x10.9 size 3000, 8UC3, up
7 0 x13.8 size 1000, 8UC3, down
26 1 x23.8 size 2000, 8UC3, down
58 1 x32.7 size 3000, 8UC3, down
27 1 x17.1 size 1000, 8UC4, up
108 4 x26 size 2000, 8UC4, up
250 9 x27.5 size 3000, 8UC4, up
9 0 x14.6 size 1000, 8UC4, down
32 0 x37.4 size 1000, 8UC4, down
73 1 x52 size 1000, 8UC4, down
9 2 x4.72 size 1000, 32FC1, up
41 6 x6.25 size 2000, 32FC1, up
88 13 x6.45 size 3000, 32FC1, up
2 0 x4.92 size 1000, 32FC1, down
10 0 x12.1 size 2000, 32FC1, down
23 1 x17.2 size 3000, 32FC1, down
cvtColor
29 0 x37.1 size 4000, CV_GRAY2BGRA
82 1 x61.8 size 4000, CV_BGR2YCrCb
105 1 x71.3 size 4000, CV_YCrCb2BGR
123 1 x84.4 size 4000, CV_BGR2XYZ
116 1 x83.7 size 4000, CV_XYZ2BGR
195 2 x72.9 size 4000, CV_BGR2HSV
550 2 x189 size 4000, CV_HSV2BGR
erode 
9 3 x2.65 size 2000
22 7 x3.07 size 3000
39 11 x3.35 size 4000
threshold   
0 0  x1.62 size 1000, 8U, THRESH_BINARY
1 0  x6.15 size 2000, 8U, THRESH_BINARY
3 0  x11.1 size 3000, 8U, THRESH_BINARY
6 0  x11.4 size 4000, 8U, THRESH_BINARY
1 0  x7.49 size 1000, 32F, THRESH_BINARY
6 0  x18.8 size 2000, 32F, THRESH_BINARY
14 0  x19.6 size 3000, 32F, THRESH_BINARY
25 1  x21.9 size 4000, 32F, THRESH_BINARY
pow   
5 0 x32.9 size 1000, 32F
20 0 x57.1 size 2000, 32F
44 0 x58.2 size 3000, 32F
83 1 x55.8 size 4000, 32F
projectPoints
49 2 x23.3 size 1000000
37 2 x16.1 size 714285
26 1 x24.5 size510203
19 0 x20.9 size 364430
12 0 x21.6 size 230307
solvePnPRansac
217 118 x1.84 num_points 5000
392 120 x3.25 num_points 18800
1315 127 x10.3 num_points 70688
4984 160 x31 num_points 265786
GaussianBlur
1  0 x4.26 8UC1, size 1000
6  1 x5.61 8UC1, size 2000
14  2 x6.08 8UC1, size 3000
24  3 x6.36 8UC1, size 4000
5  0 x7.57 8UC4, size 1000
24  2 x10.2 8UC4, size 2000
56  4 x11.8 8UC4, size 3000
100  8 x11.7 8UC4, size 4000
2  0 x5.16 32FC1, size 1000
8  1 x7.39 32FC1, size 2000
17  2 x7.6 32FC1, size 3000
33  3 x8.63 32FC1, size 4000
pryDown
18 5 x3.55 8UC1, size 4000
10 2 x3.62 8UC1, size 3000
4 1 x3.41 8UC1, size 2000
1 0 x2.74 8UC1, size 1000
64 6 x9.52 8UC3, size 4000
38 3 x10 8UC3, size 3000
16 1 x9.26 8UC3, size 2000
4 0 x7.71 8UC3, size 1000
66 7 x8.98 8UC4, size 4000
38 4 x9.14 8UC4, size 3000
17 2 x6.36 8UC4, size 2000
4 0 x7.98 8UC4, size 1000
107 6 x15.6 16SC4, size 4000
60 3 x15.6 16SC4, size 3000
26 1 x14.9 16SC4, size 2000
7 0 x10.2 16SC4, size 1000
29 5 x5.7 32FC1, size 4000
17 3 x5.92 32FC1, size 3000
7 1 x5.65 32FC1, size 2000
1 0 x4.62 32FC1, size 1000
88 6 x13 32FC3, size 4000
52 3 x13.8 32FC3, size 3000
22 1 x12.7 32FC3, size 2000
5 0 x4.92 32FC3, size 1000
122 7 x17 32FC4, size 4000
67 4 x16.9 32FC4, size 3000
30 1 x16.6 32FC4, size 2000
7 0 x14.4 32FC4, size 1000
pyrUp
51 5 x8.97 8UC1, size 2000
12 1 x8.52 8UC1, size 1000
145 8 x17.3 8UC3, size 2000
36 2 x16.5 8UC3, size 1000
198 11 x17.6 8UC4, size 2000
48 2 x16.7 8UC4, size 1000
170 8 x19.6 16SC3, size 2000
44 2 x20.1 16SC3, size 1000
69 5 x12.2 32FC1, size 2000
17 1 x11.4 32FC1, size 1000
205 7 x27.3 32FC3, size 2000
21 1 x26.2 32FC3, size 1000
equalizeHist
2 1 x1.93 size 1000
10 2 x4.78 size 2000
23 3 x6.37 size 3000
Canny
29 3  x9.63
reduce
1 0 x7.79 size 1000, dim = 0
1 0 x10.1 size 1000, dim = 1
6 0 x14.5 size 2000, dim = 0
6 0 x25.2 size 2000, dim = 1
13 0 x17.5 size 3000, dim = 0
13 0 x29.3 size 3000, dim = 1

average GPU speedup: x29.202

 

sizeの表記は、size1000の場合、画像サイズは1000×1000となります。

 

一般的にGPUを使った画像処理ではメモリの転送時間がかかり処理時間トータルでは、あまり高速化されない

と言われる場合も多いので、ソースコードを見てみないと、いまいち結果をそのまま信用できない...

でも、とりあえずは、そこそこ速そうな結果でした

 

ソースコードは こちら

https://code.ros.org/trac/opencv/changeset/6950?utm_source=twitterfeed&utm_medium=twitter

 

OpenCVへ戻る

 

OpenCV2.3.1が公開されました。

OpenCV2.3.1のインストール方法については、別途記事にまとめました。
下記を参照願います。
OpenCV2.3.1の入手、ダウンロード、インストール、環境設定


 

本日(2011.8.18)、OpenCV 2.3.1が公開されました。

 

Android版の2.3.1のβ版は比較的前から公開されていましたが、今回はWindows版が公開されました。

 

ただし、OpenCV-2.3.1-win-superpack.exe のコンパイル済み版のみ?

と思っていたら、OpenCV-2.3.1-win-superpack.exeを解凍して出来たopencvというフォルダにソースコードが格納されているので、このフォルダをCMakeのsource codeフォルダに指定すればOKです。

 

入手先

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/

変更内容

http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs

 

まだ、実際には触っていませんが、まずは報告まで。

 

インストール方法についてはVer2.3.0とフォルダ構成が若干異なりますが、『OpenCV-2.3.0-win-superpack.exe』を使うときとほぼ同じなので、下記、リンク先の記事を参照下さい。

libファイルの2.3.0の部分を2.3.1に読み替えて参照下さい。

 

(参考)

OpenCV2.3の入手、ダウンロード、インストール、環境設定

https://imagingsolution.net/program/opencv/opencv2-3/opencv2-3-downlaod-install/