DOSEIの日記

技術メモ+日常ログ

OpenCV

OpenCV のサンプルディレクトリ

Fedora 18 で、 opencv-devel-docs (2.4.3-3) を入れると、 サンプルが /usr/share/OpenCV/samples と /usr/share/opencv/samples に分かれてるんだけど、これはパッケージングのミスだろうか? ソースパッケージとか見た方がいいのかもしれないけど、時間な…

Mat_ の (本当の) 罠

id:DOSEI:20130306:p1 の訂正記事。のつもりだったけど、まだ理解が不十分だったので以下の文章は治す予定。うのむな。 まとめ cv::Mat_ を関数の引数の型にしてはいけない。 理由 cv::Mat_ は、 cv::Mat の型を固定した薄いラッパーです。 Mat は任意の型を…

cv::Mat_ を使う場合の注意。

以前ここにあった記事は、見えなくしてあります。cv::Mat_::type() などは、 cv::DataType::type などを返すので、元々が何の型の Mat をラッピングしているかは調べられない…。

行列初期化の罠

プロローグ よーしパパ、要素が 0 で初期化された行列つくっちゃうぞー cv::Mat A(150, 100, CV_32S, 0); A.at<int>(20,10) = 30; コンパイルも通ったし、バッチリだ! エピローグ セグフォー! 後日談 cv::Mat のコンストラクタはたくさんあり、そのなかには値で</int>…

version 2.3 ぐらいからある class SVD の使い方

古き良き cvSVD() と違って、 class SVD というものが導入されている。マニュアルにはなぜか class SVD の定義が載ってないので、 opencv2/core/core.hpp を見ると、 class SVD { public: SVD(); SVD(const Mat& src, int flags=0); SVD& operator()(const M…

OpenCV 2.2 の変更点

http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs 一般的な変更と改善 ライブラリの再構成: cxcore, cv, cvaux, highgui, ml がより小さなモジュールに分かれた。 opencv_core opencv_imgproc opencv_highgui opencv_ml opencv_features2d openc…

cvSaveImage()

ppm で保存すると, plain になる。うーむ。しょうがないので、その後 convert -format ppm *.ppm とかで raw に変換。

後方互換関数を使わないようにする

OpenCV は、過去の互換性のために、古いバージョンの関数を cvcompat.h (cv.h で読み込まれる) で宣言している。しかし、このファイルのコメントに将来削除する可能性がある (They are obsolete and are likely to be removed in future.) とあるため、使わ…

OpenCV 1.0 available

11/6 ついにリリースされた。Fedora extras にはまだ来てない。 CVS にある ChangeLog の HEAD (最新版) は CVS Info for project opencvlibrary で、注目すべきは キャリブレーションサンプル calibrate.cpp が付いた 修正: Incorrect normalization in cvF…

OpenCV 1.0rc1 (0.9.9)

おーっ、ついにベータが取れるのか…。 http://sourceforge.net/projects/opencvlibrary/ 以下、rc1 のニュース の和訳 OpenCV は初の安定リリースを目前としています。最新のベータ版から長い時間がかかりましたが、ライブラリに多くの新機能の追加や改良が…

CVS 版の RPM 作成

以下の手順で RPM パッケージを作成。環境は Fedora Core 4. CVSで作った opencv ディレクトリを opencv-cvs20060510 にリネーム。 OpenCV 0.9.7 の opencv.spec をコピーしてくる(適当な対処法)。 このファイルの Copyright は古い、とエラーが出るので L…

cvPerspectiveTransform()

0.9.7 のマニュアルでは 3チャンネルであるとかかれているが、ほんとは 3x3 の行列なら 2チャンネルでなければいけない。なお、2次元の場合は という変換をする。

雑感

CvPoint と行列との相性というか、インタフェースが悪すぎると思う。画像上の点 CvPoint p を何か透視変換してまた CvPoint q に戻すには、 CvMat *pp = cvCreateMat(1, 1, CV_32FC2); // 2チャンネルの1x1行列 CvMat *qq = cvCreateMat(1, 1, CV_32FC2); cv…

行列の掛け算

OpenCV のマニュアルの索引を見回しても、行列の積を求める関数が見当たらない。 cvMul() は要素同士の積だし…実は、 cvGEMM() という「一般化」された積を求める関数が用意されている。そこにその簡略化バージョンとして、 cvMatMulAdd() cvMatMul() という…

cvMouseCallBack の仕様

ウィンドウからマウスイベントを拾うためのコールバックの仕様が、 OpenCV 0.9.6(beta4) では CV_EXTERN_C_FUNCPTR( void (*CvMouseCallback )(int event, int x, int y, int flags) );だったが OpenCV 0.9.7(beta5) では CV_EXTERN_C_FUNCPTR( void (*CvMou…

cvFindCornerSubPix()の罠

与える画像はグレースケール(1チャンネル)でないと "Bad type of mask argument" という例外で止まる。Undocumented. cvLoadImage() で第2引数に 0 を。

cvCalibrateCamera2 のサンプル

http://www.engr.ucsb.edu/~mquinn/opencv/

FC4 でのビルド

通常のmakeでは正常に動かない(例:サンプルの delaunay )のは、どうやら最適化オプション -O3 のせいらしい。configure の設定をいじってもなんかうまくいかなかったので、 $ ./configure CXXFLAGS="-O1"としたらうまくいった。-O0 (最適化なし)でもい…

キャリブレーション関係関数群の代替

目的 0.9.6 0.9.7 チェスボードパターン検出 FindChessBoardCornerGuesses FindChessboardCorners 検出されたチェスボードパターン描画 - DrawChessboardCorners 内部パラメタ推定 CalibrateCamera[_64d] CalibrateCamera2 ゆがみ補正 UnDistortOnce, UnDist…

0.9.7

7/26 に beta 5a が出た。 主な変更点は以下の通り: カメラ・ビデオ関連 EMT64 環境対応 パフォーマンステスト機能 いくつかの関数追加(ハフ変換による円の抽出など) キャリブレーション関連の関数が「完全に」書き直され、APIが単純化し、ドキュメント化…

ウィンドウイベント

OpenCV におけるマウスイベント処理の使えなさ ウィンドウプロシージャ(コールバック)からデータを取得するときは、グローバル変数を使わざるを得ない。 ウィンドウIDが文字列なのだが、ウィンドウタイトル(キャプション)としても使われるので、メッセー…