CXCORE リファレンス マニュアル
- 基本構造体(Basic Structures)
- 配列操作(Operations on Arrays)
- 動的構造体(Dynamic Structures)
- 描画関数(Drawing Functions)
- データ永続性と実行時型情報(Data Persistence and RTTI)
- その他の関数(Miscellaneous Functions)
- エラーハンドリングとシステム関数(Error Handling and System Functions)
配列操作(Operations on Arrays)
数学関数(Math Functions)
Round, Floor, Ceil
浮動小数点型の変数を整数型に変換する
int cvRound( double value ); int cvFloor( double value ); int cvCeil( double value );
- value
- 浮動小数点型の入力値.
関数cvRound, cvFloor,cvCeilは,浮動小数点型の入力値を丸め手法(Round, Floor, Ceil)の一つを利用して整数型に変換する.cvRoundは,引数に最も近い整数値を返す.cvFloorは,引数より大きくない最大の整数値を返す.cvCeilは,引数より小さくない最小の整数値を返す.いくつかのアーキテクチャにおいて,これらの関数はC言語の標準的なキャスト演算よりも非常に高速である. 引数の絶対値が231より大きい場合,結果は求まらない.また,特別な値(±Inf, NaN)は扱うことができない.
Sqrt
平方根を計算する
float cvSqrt( float value );
- value
- 浮動小数点型の入力値.
関数cvSqrtは,引数の平方根を計算する. 引数が負の値の場合,結果は求まらない.
InvSqrt
平方根の逆数を計算する
float cvInvSqrt( float value );
- value
- 浮動小数点型の入力値.
関数cvInvSqrtは,引数の平方根の逆数を計算する.これは,通常,1./sqrt(value)を計算するよりも高速である. 引数が0または負の値のとき,結果は求まらない.また,特別な値(±Inf, NaN)は扱うことができない.
Cbrt
立方根を計算する
float cvCbrt( float value );
- value
- 浮動小数点型の入力値.
関数cvCbrtは,引数の立方根を計算する.これは,通常,pow(value,1./3)を計算するよりも高速である. 一方,負の引数も正しく処理される.また,特別な値(±Inf, NaN)は扱うことができない.
FastArctan
2次元のベクトルの角度を計算する
float cvFastArctan( float y, float x );
- x
- 2次元ベクトルのx座標.
- y
- 2次元ベクトルのy座標.
関数cvFastArctanは入力された2次元ベクトルの角度を計算する. 角度は度(degree)単位で扱われ,0°から360°の範囲で変化する.精度は ~0.1°.
IsNaN
引数が数値でないかどうかを確認する
int cvIsNaN( double value );
- value
- 浮動小数点型の入力値.
関数cvIsNaNは,引数が数値(IEEE754 standard に定義されている)でなければ1を返し,その他の場合は0を返す.
IsInf
引数が無限大であるかどうかを確認する
int cvIsInf( double value );
- value
- 浮動小数点型の入力値.
関数cvIsInfは,引数が±無限大(IEEE754 standard に定義されている)であれば1を返し,その他の場合は0を返す.
CartToPolar
2次元ベクトルの角度と大きさを計算する
void cvCartToPolar( const CvArr* x, const CvArr* y, CvArr* magnitude,
CvArr* angle=NULL, int angle_in_degrees=0 );
- x
- x座標の配列.
- y
- y座標の配列.
- magnitude
- 大きさの出力配列.必要でなければNULLがセットされる.
- angle
- 角度の出力配列.必要でなければNULLがセットされる.角度はラジアン(0..2π),または度(0..360°)で測定される.
- angle_in_degrees
- 角度を表すためにラジアン(デフォルト値),または度のどちらを用いるかを示すフラグ.
関数cvCartToPolarは,2次元ベクトル(x(I),y(I))の大きさと角度のどちらか,またはその両方を計算する.
magnitude(I)=sqrt( x(I)2+y(I)2 ), angle(I)=atan( y(I)/x(I) )
角度は≈0.1°の精度で計算される.(0,0)の場合,角度は0にセットされる.
PolarToCart
極座標形式で表現された2次元ベクトルのデカルト座標を計算する
void cvPolarToCart( const CvArr* magnitude, const CvArr* angle,
CvArr* x, CvArr* y, int angle_in_degrees=0 );
- magnitude
- 大きさの配列.NULLの場合,大きさはすべて1と仮定される.
- angle
- 角度の配列.単位はラジアン,または度である.
- x
- x座標の出力配列で,必要でなければNULLがセットされる.
- y
- y座標の出力配列で,必要でなければNULLがセットされる.
- angle_in_degrees
- このフラグは角度を表すために,ラジアン(デフォルト値)または度のどちらを用いるかを示す.
関数cvPolarToCartは,すべてのベクトルのx座標とy座標のどちらか, またその両方のmagnitude(I)*exp(angle(I)*j), j=sqrt(-1)を計算する.
x(I)=magnitude(I)*cos(angle(I)), y(I)=magnitude(I)*sin(angle(I))
Pow
すべての配列要素を累乗する
void cvPow( const CvArr* src, CvArr* dst, double power );
- src
- 入力配列.
- dst
- 出力配列.入力と同じタイプでなければならない.
- power
- 累乗の指数.
関数cvPowは,入力配列のすべての要素を以下のようにp乗する.
dst(I)=src(I)p, (p が整数の場合),
dst(I)=abs(src(I))p, (それ以外の場合)
累乗の指数が整数でない場合は,入力配列要素の絶対値が用いられる. しかし,いくつかの追加処理によって負の値に対しても正しい値を得ることができる.以下に,配列要素の立方根を計算する例を示す.
CvSize size = cvGetSize(src); CvMat* mask = cvCreateMat( size.height, size.width, CV_8UC1 ); cvCmpS( src, 0, mask, CV_CMP_LT ); /* 負の要素を検出 */ cvPow( src, dst, 1./3 ); cvSubRS( dst, cvScalarAll(0), dst, mask ); /* 負の入力に対する結果を反転する */ cvReleaseMat( &mask );
整数や0.5,-0.5など一部のpowerの値に対しては,特に高速なアルゴリズムが用いられる.
Exp
すべての配列要素について自然対数の底(ネイピア数)eのべき乗を求める
void cvExp( const CvArr* src, CvArr* dst );
- src
- 入力配列.
- dst
- 出力配列.倍精度の浮動小数点型(double),または入力配列と同じタイプでなければならない.
関数cvExpは入力配列のすべての要素に対して,それを指数とする自然対数の底eのべき乗を求める.
dst(I)=exp(src(I))
最大相対誤差は≈7e-6.現在,この関数は,指数表現されない(denormalize)値を出力時に0に変換する.
Log
すべての配列要素の絶対値の自然対数を計算する
void cvLog( const CvArr* src, CvArr* dst );
- src
- 入力配列.
- dst
- 出力配列.倍精度の浮動小数点型(double),または入力配列と同じタイプでなければならない
関数cvLogは,入力配列のすべての要素の絶対値の自然対数を計算する.
dst(I)=log(abs(src(I))), (src(I)!=0の場合) dst(I)=C, (src(I)=0の場合)ここで,C は大きな負の数である (現在の実装では≈-700).
SolveCubic
3次方程式の実根を求める
int cvSolveCubic( const CvMat* coeffs, CvMat* roots );
- coeffs
- 式の係数で,3個または4個の要素を持つ配列.
- roots
- 実根の出力配列.三つの要素を持つ.
関数cvSolveCubicは,3次方程式の実根を求める.
coeffs[0]*x3 + coeffs[1]*x2 + coeffs[2]*x + coeffs[3] = 0 (coeffsが4要素のベクトルの場合) or x3 + coeffs[0]*x2 + coeffs[1]*x + coeffs[2] = 0 (coeffsが3要素のベクトルの場合)
この関数は求めた実根の数を返し,配列rootsに根を格納する. 一つの根しかない場合,出力配列はには0が追加される.