OpenCV 4.5.3(日本語機械翻訳)
クラス | 列挙型 | 関数 | 変数
Imgproc_shape

クラス

class cv::Moments
が返す構造体cv::moments [【詳解】(英語]
class cv::DataType< Moments >
class cv::GeneralizedHough
一般化ハフ変換を用いて,グレースケール画像の中から任意のテンプレートを見つけます.[【詳解】(英語]
class cv::GeneralizedHoughBallard
一般化ハフ変換を用いて,グレースケール画像の中から任意のテンプレートを見つけます.[【詳解】(英語]
class cv::GeneralizedHoughGuil
一般化ハフ変換を用いて,グレースケール画像の中から任意のテンプレートを見つけます.[【詳解】(英語]

列挙型

enum cv::ConnectedComponentsTypes {
cv::CC_STAT_LEFT = 0 , cv::CC_STAT_TOP = 1 , cv::CC_STAT_WIDTH = 2 , cv::CC_STAT_HEIGHT = 3 ,
cv::CC_STAT_AREA = 4 , cv::CC_STAT_MAX = 5
}
連結成分統計[【詳解】(英語]
enum cv::ConnectedComponentsAlgorithmsTypes {
cv::CCL_DEFAULT = -1 , cv::CCL_WU = 0 , cv::CCL_GRANA = 1 , cv::CCL_BOLELLI = 2 ,
cv::CCL_SAUF = 3 , cv::CCL_BBDT = 4 , cv::CCL_SPAGHETTI = 5
}
連結成分アルゴリズム[【詳解】(英語]
enum cv::RetrievalModes {
cv::RETR_EXTERNAL = 0 , cv::RETR_LIST = 1 , cv::RETR_CCOMP = 2 , cv::RETR_TREE = 3 ,
RETR_FLOODFILL = 4
}
輪郭線検索アルゴリズムのモード[【詳解】(英語]
enum cv::ContourApproximationModes { cv::CHAIN_APPROX_NONE = 1 , cv::CHAIN_APPROX_SIMPLE = 2 , cv::CHAIN_APPROX_TC89_L1 = 3 , cv::CHAIN_APPROX_TC89_KCOS = 4 }
輪郭線近似アルゴリズム[【詳解】(英語]
enum cv::ShapeMatchModes { cv::CONTOURS_MATCH_I1 =1 , cv::CONTOURS_MATCH_I2 =2 , cv::CONTOURS_MATCH_I3 =3 }
形状照合法[【詳解】(英語]
enum cv::RectanglesIntersectTypes { cv::INTERSECT_NONE = 0 , cv::INTERSECT_PARTIAL = 1 , cv::INTERSECT_FULL = 2 }
矩形の交点の種類[【詳解】(英語]

関数

CV_EXPORTS_W Moments cv::moments (InputArray array, bool binaryImage=false)
ポリゴンやラスタライズされた形状の,3次までのすべてのモーメントを計算します.[【詳解】(英語]
CV_EXPORTS void cv::HuMoments (const Moments &moments, double hu[7])
7つのHu不変量を計算します。[【詳解】(英語]
CV_EXPORTS_W void cv::HuMoments (const Moments &m, OutputArray hu)
cv::CV_EXPORTS_AS (connectedComponentsWithAlgorithm) int connectedComponents(InputArray image
連結成分の計算 ブーリアンイメージのラベル付きイメージ[【詳解】(英語]
CV_EXPORTS_W int cv::connectedComponents (InputArray image, OutputArray labels, int connectivity=8, int ltype=CV_32S)
cv::CV_EXPORTS_AS (connectedComponentsWithStatsWithAlgorithm) int connectedComponentsWithStats(InputArray image
は,ブーリアン画像の連結成分ラベル付き画像を計算し,各ラベルの統計出力も生成します.[【詳解】(英語]
CV_EXPORTS_W int cv::connectedComponentsWithStats (InputArray image, OutputArray labels, OutputArray stats, OutputArray centroids, int connectivity=8, int ltype=CV_32S)
CV_EXPORTS_W void cv::findContours (InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())
2値画像の輪郭を見つけます.[【詳解】(英語]
CV_EXPORTS void cv::findContours (InputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset=Point())
CV_EXPORTS_W void cv::approxPolyDP (InputArray curve, OutputArray approxCurve, double epsilon, bool closed)
多角形の曲線を指定された精度で近似します。[【詳解】(英語]
CV_EXPORTS_W double cv::arcLength (InputArray curve, bool closed)
輪郭の周囲長や曲線の長さを計算します。[【詳解】(英語]
CV_EXPORTS_W Rect cv::boundingRect (InputArray array)
点集合やグレースケール画像の非0ピクセルの右上境界矩形を計算します.[【詳解】(英語]
CV_EXPORTS_W double cv::contourArea (InputArray contour, bool oriented=false)
輪郭線の面積を計算します.[【詳解】(英語]
CV_EXPORTS_W RotatedRect cv::minAreaRect (InputArray points)
入力された2次元点群を囲む,最小面積の回転した矩形を求めます.[【詳解】(英語]
CV_EXPORTS_W void cv::boxPoints (RotatedRect box, OutputArray points)
回転した矩形の4つの頂点を求めます.回転した矩形を描画するのに便利です.[【詳解】(英語]
CV_EXPORTS_W void cv::minEnclosingCircle (InputArray points, CV_OUT Point2f &center, CV_OUT float &radius)
2次元点群を囲む最小面積の円を求めます.[【詳解】(英語]
CV_EXPORTS_W double cv::minEnclosingTriangle (InputArray points, CV_OUT OutputArray triangle)
2次元点集合を囲む最小面積の三角形を求め、その面積を返します。[【詳解】(英語]
CV_EXPORTS_W double cv::matchShapes (InputArray contour1, InputArray contour2, int method, double parameter)
2つの形状を比較します。[【詳解】(英語]
CV_EXPORTS_W void cv::convexHull (InputArray points, OutputArray hull, bool clockwise=false, bool returnPoints=true)
点集合の凸包を求める関数です。[【詳解】(英語]
CV_EXPORTS_W void cv::convexityDefects (InputArray contour, InputArray convexhull, OutputArray convexityDefects)
輪郭の凸欠陥を検出します。[【詳解】(英語]
CV_EXPORTS_W bool cv::isContourConvex (InputArray contour)
輪郭の凸性をテストします。[【詳解】(英語]
CV_EXPORTS_W float cv::intersectConvexConvex (InputArray p1, InputArray p2, OutputArray p12, bool handleNested=true)
2つの凸状の多角形の交点を求める[【詳解】(英語]
CV_EXPORTS_W RotatedRect cv::fitEllipse (InputArray points)
2次元の点群の周りに楕円をフィットさせます.[【詳解】(英語]
CV_EXPORTS_W RotatedRect cv::fitEllipseAMS (InputArray points)
2次元の点群の周りに楕円をフィットさせます.[【詳解】(英語]
CV_EXPORTS_W RotatedRect cv::fitEllipseDirect (InputArray points)
2次元の点群の周りに楕円をフィットさせます.[【詳解】(英語]
CV_EXPORTS_W void cv::fitLine (InputArray points, OutputArray line, int distType, double param, double reps, double aeps)
直線を2次元あるいは3次元の点群にフィットさせます.[【詳解】(英語]
CV_EXPORTS_W double cv::pointPolygonTest (InputArray contour, Point2f pt, bool measureDist)
Point-in-contourテストを行います。[【詳解】(英語]
CV_EXPORTS_W int cv::rotatedRectangleIntersection (const RotatedRect &rect1, const RotatedRect &rect2, OutputArray intersectingRegion)
回転させた2つの矩形に交点が存在するかどうかを調べます.[【詳解】(英語]
CV_EXPORTS_W Ptr< GeneralizedHoughBallard > cv::createGeneralizedHoughBallard ()
オブジェクトへのスマート ポインタを作成し、初期化します。cv::GeneralizedHoughBallardクラスを作成し,それを初期化します.
CV_EXPORTS_W Ptr< GeneralizedHoughGuil > cv::createGeneralizedHoughGuil ()
オブジェクトへのスマート ポインタを作成し、初期化します。cv::GeneralizedHoughGuilクラスを作成し,それを初期化します.

変数

OutputArray int cv::connectivity
OutputArray int int cv::ltype
OutputArray int int int cv::ccltype
OutputArray OutputArray cv::stats
OutputArray OutputArray OutputArray cv::centroids

詳解

列挙型詳解

ConnectedComponentsAlgorithmsTypes

連結成分アルゴリズム

列挙値
CCL_DEFAULT

BBDT[Grana2010].アルゴリズムは,8方向の接続にはBBDTアルゴリズム,4方向の接続にはSAUFアルゴリズムを用いる.で説明されている並列実装は[Bolelli2017]はBBDTとSAUFの両方で利用できます。

CCL_WU

SAUF[Wu2009]に記載されているアルゴリズムは,8方向の接続にはBBDTアルゴリズム,4方向の接続にはSAUFアルゴリズムを用いる.で説明されている並列実装は[Bolelli2017]は、SAUFで利用可能です。

CCL_GRANA

BBDT[Grana2010].アルゴリズムは,8方向の接続にはBBDTアルゴリズム,4方向の接続にはSAUFアルゴリズムを用いる.で説明されている並列実装は[Bolelli2017]はBBDTとSAUFの両方で利用できます。

CCL_BOLELLI

スパゲッティ(Spaghetti)[Bolelli2019]を使用しています。8方向の接続性に対するアルゴリズム、4方向の接続性に対するSAUFアルゴリズム。

CCL_SAUF

CCL_WUと同じ。第一著者名のフラグ(CCL_WU)ではなく、アルゴリズム名のフラグ(CCL_SAUF)を使用することが望ましい。

CCL_BBDT

CCL_GRANAと同じ。CCL_GRANAと同じだが、筆頭著者名のフラグ(CCL_GRANA)よりも、アルゴリズム名のフラグ(CCL_BBDT)を使用することが望ましい。

CCL_SPAGHETTI

CCL_BOLELLIと同じです。筆頭著者名(CCL_BOLELLI)のフラグよりも、アルゴリズム名(CCL_SPAGHETTI)のフラグを使用することが望ましい。

ConnectedComponentsTypes

連結成分統計

列挙値
CC_STAT_LEFT

水平方向のバウンディングボックスの包括的な開始である左端(x)座標。

CC_STAT_TOP

垂直方向のバウンディング・ボックスの包括的な開始である最上部(y)座標。

CC_STAT_WIDTH

バウンディング・ボックスの水平方向のサイズ

CC_STAT_HEIGHT

バウンディング・ボックスの垂直方向のサイズ

CC_STAT_AREA

接続されたコンポーネントの合計面積(ピクセル)で

CC_STAT_MAX

最大列挙値。メモリの割り当てのために内部的にのみ使用される

ContourApproximationModes

輪郭線近似アルゴリズム

列挙値
チェーン・アクセプト・ノーン

は、絶対にすべての輪郭点を保存します。つまり、輪郭の2つの後続点(x1,y1)と(x2,y2)は、水平、垂直、斜めのいずれかの隣り合う点となります。つまり、max(abs(x1-x2),abs(y2-y1))==1となります。

チェーン_アプソリュート_シンプル

は水平、垂直、対角線上のセグメントを圧縮し、その端点のみを残します。例えば、右上の長方形の輪郭は4点でエンコードされます。

チェーン_アプレット_tc89_l1

は、Teh-Chin チェーン近似アルゴリズムのフレーバーの 1 つを適用します。[TehChin89]を参照してください。

チェーン近似_tc89_kcos

は、Teh-Chin チェーン近似アルゴリズムのフレーバーの 1 つを適用します。[TehChin89]を参照してください。

RectanglesIntersectTypes

矩形の交点の種類

列挙値
INTERSECT_NONE

交差しない

INTERSECT_PARARTIAL

部分的な交点がある

INTERSECT_FULL

矩形の一方が他方に完全に囲まれている

RetrievalModes

輪郭線検索アルゴリズムのモード

列挙値
RETR_EXTERNAL

は、極端に外側の輪郭のみを検索します。これは全ての輪郭に対してhierarchy[i][2]=hierarchy[i][3]=-1をすべての輪郭に対して設定する。

RETR_LIST

階層的な関係を確立することなく、すべての輪郭を検索する。

RETR_CCOMP

は、すべての輪郭を検索し、それらを2レベルの階層に整理します。一番上のレベルでは、コンポーネントの外部境界があります。2番目のレベルでは、穴の境界がある。もし、連結されたコンポーネントの穴の中に別の輪郭がある場合、それはやはりトップレベルに置かれます。

RETR_TREE

は、全ての輪郭を取得し、入れ子になった輪郭の完全な階層を再構成します。

ShapeMatchModes

形状照合法

$A$はオブジェクト1を表します。$B$はオブジェクト2を表します。

$\begin{array}{l} m^A_i = \mathrm{sign} (h^A_i) \cdot \log{h^A_i} \\ m^B_i = \mathrm{sign} (h^B_i) \cdot \log{h^B_i} \end{array}$

および$h^A_i, h^B_i$のHuモーメントです。$A$および$B$となります。

列挙値
contours_match_i1

\[I_1(A,B) = \sum _{i=1...7} \left | \frac{1}{m^A_i} - \frac{1}{m^B_i} \right |\]

contours_match_i2

\[I_2(A,B) = \sum _{i=1...7} \left | m^A_i - m^B_i \right |\]

contours_match_i3

\[I_3(A,B) = \max _{i=1...7} \frac{ \left| m^A_i - m^B_i \right| }{ \left| m^A_i \right| }\]

関数詳解

approxPolyDP()

CV_EXPORTS_W void cv::approxPolyDP ( InputArray curve,
OutputArray approxCurve,
double epsilon,
bool closed
)

多角形の曲線を指定された精度で近似します。

この関数はcv::approxPolyDPは、ある曲線や多角形を、より少ない頂点を持つ別の曲線や多角形と、それらの間の距離が指定された精度以下になるように近似します。Douglas-Peucker アルゴリズムを使用しています。http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm

引数
curve std::vectorに格納された2次元点の入力ベクトルまたはMat
approxCurve 近似の結果.型は入力曲線の型と一致する必要があります。
epsilon 近似精度を指定するパラメータ.元の曲線とその近似曲線の最大距離を指定します。
closed true の場合、近似曲線は閉じています(最初の頂点と最後の頂点がつながっています)。そうでない場合は、閉じていません。

arcLength()

CV_EXPORTS_W double cv::arcLength ( InputArray curve,
bool closed
)

輪郭の周囲長や曲線の長さを計算します。

この関数は,曲線の長さや,閉じた輪郭の周囲長を求めます.

引数
curve 入力 2次元点のベクトル(std::vector または std::vector に格納されています).Mat.
closed 曲線が閉じているかどうかを示すフラグ.

boundingRect()

CV_EXPORTS_W Rect cv::boundingRect ( InputArray array )

点集合やグレースケール画像の非0ピクセルの右上境界矩形を計算します.

この関数は,指定された点集合またはグレースケール画像の非ゼロピクセルに対する最小の右上がりの外接矩形を計算して返します.

引数
array 入力 濃淡画像,またはstd::vectorに格納された2次元点集合,またはMat.

boxPoints()

CV_EXPORTS_W void cv::boxPoints ( RotatedRect box,
OutputArray points
)

回転した矩形の4つの頂点を求めます.回転した矩形を描画するのに便利です.

この関数は,回転した矩形の4つの頂点を求めます.この関数は,矩形を描画するのに便利です.C++ では,この関数を使う代わりに,直接RotatedRect::pointsメソッドを使用します。詳しくは,チュートリアル「Creating Bounding rotated box and ellips for contours」をご覧ください.

引数
box 入力される回転した矩形。の出力である場合もあります。
points 矩形の4つの頂点を表す出力配列.

connectedComponents()

CV_EXPORTS_W int cv::connectedComponents ( InputArray image,
OutputArray labels,
int connectivity = 8,
int ltype = CV_32S
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

引数
image ラベル付けされる8ビットシングルチャンネル画像
labels ラベル付けされる画像
connectivity 8方向または4方向の接続を表す8または4
ltype 出力画像のラベルタイプ.現在は CV_32S と CV_16U がサポートされています.

connectedComponentsWithStats()

CV_EXPORTS_W int cv::connectedComponentsWithStats ( InputArray image,
OutputArray labels,
OutputArray stats,
OutputArray centroids,
int connectivity = 8,
int ltype = CV_32S
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

引数
image ラベル付けされる8ビットシングルチャンネル画像
labels ラベル付けされる画像
stats 背景ラベルを含む,各ラベルの統計情報を出力します.統計情報にアクセスするには stats(label, COLUMN) を利用します.ConnectedComponentsTypesで,統計量を選択します.データタイプはCV_32Sです。
centroids 背景ラベルも含めた各ラベルのセントロイド出力.セントロイドへのアクセスは, x の場合は centroids(label, 0) , y の場合は centroids(label, 1) となります.
connectivity 8方向または4方向の接続を表す8または4
ltype 出力画像のラベルタイプ.現在は CV_32S と CV_16U がサポートされています.

contourArea()

CV_EXPORTS_W double cv::contourArea ( InputArray contour,
bool oriented = false
)

輪郭線の面積を計算します.

この関数は,輪郭の面積を計算します.moments と同様に,面積は Green の式を用いて計算されます.を用いて輪郭を描いた場合,返される面積と0ではないピクセルの数は異なります.drawContoursまたはfillPolyを使って輪郭を描いた場合,返される面積とゼロではないピクセル数は異なる可能性があります。また,この関数は,自己交差のある輪郭に対しては,確実に間違った結果を返します.

vector<Point> contour;
contour.push_back(Point2f(0, 0));
contour.push_back(Point2f(10, 0));
contour.push_back(Point2f(10, 10));
contour.push_back(Point2f(5, 4));
double area0 = contourArea(contour);
vector<Point> approx;
approxPolyDP(contour, approx, 5, true);
double area1 = contourArea(approx);
cout << "area0 =" << area0 << endl <<
"area1 =" << area1 << endl <<
"approx poly vertices" << approx.size() << endl;
CV_EXPORTS_W void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)
Approximates a polygonal curve(s) with the specified precision.
CV_EXPORTS_W double contourArea(InputArray contour, bool oriented=false)
Calculates a contour area.
引数
contour 2次元点(輪郭の頂点)の入力ベクトルは,std::vector またはMat.
oriented Oriented area フラグ.これが真の場合,この関数は,輪郭の向き(時計回りか反時計回りか)に応じた符号付き面積値を返します.この機能を使えば、面積の符号を取ることで、輪郭の向きを判断することができます。デフォルトでは,このパラメータはfalseであり,絶対値が返されます.

convexHull()

CV_EXPORTS_W void cv::convexHull ( InputArray points,
OutputArray hull,
bool clockwise = false,
bool returnPoints = true
)

点集合の凸包を求める関数です。

この関数はcv::convexHullは,Sklanskyのアルゴリズムを用いて,2次元点集合の凸包を求めます.[Sklansky82].これには現在の実装では,O(N logN)現在の実装では,O(N logN)の複雑さです.

引数
points 入力 2次元点集合,std::vector または std::vector に格納される.Mat.
hull 凸包を出力します.これは,インデックスの整数ベクトルか,点のベクトルである.最初のケースでは,船体要素は元の配列の凸包点の0ベースのインデックスです(凸包点の集合は元の点集合の部分集合なので).2つ目のケースでは,船体要素は凸包点そのものです.
clockwise 向きフラグ.これが真の場合,出力される凸包は時計回りに配向されます.そうでない場合は,反時計回りになります.想定される座標系は,X軸が右を向き,Y軸が上を向いています.
returnPoints 操作フラグ。行列の場合,このフラグが真の場合,この関数は凸包の点を返します.そうでない場合は,凸包点のインデックスが返されます.出力配列が std::vector の場合,このフラグは無視され,出力は vector の型に依存します: std::vector<int> は returnPoints=false を意味し, std::vector<Point> は returnPoints=true を意味します.
覚え書き
pointsおよびhullが異なる配列である場合,インプレース処理はサポートされていません。

詳しくは,対応するチュートリアルをご覧ください。

便利なリンク

https://www.learnopencv.com/convex-hull-using-opencv-in-python-and-c/

convexityDefects()

CV_EXPORTS_W void cv::convexityDefects ( InputArray contour,
InputArray convexhull,
OutputArray convexityDefects
)

輪郭の凸欠陥を検出します。

下図は,手の輪郭の凸部の欠陥を表示するものです.

image

引数
contour 入力輪郭。
convexhull 凸包を構成する輪郭点のインデックスを含む, convexHull を用いて得られる凸包.
convexityDefects 凸状欠損の出力ベクトル.C++ および新しい Python/Java インタフェースでは,各凸状欠損は 4 要素の整数ベクトル(別名 #Vec4i)で表されます.(start_index, end_index, farthest_pt_index, fixpt_depth), ここで index は,凸状欠損の始点,終点,最遠点の元の輪郭における0ベースのインデックスであり,fixpt_depth は,最遠の輪郭点とハルとの間の距離の固定小数点近似(8ビットの小数ビット)です.つまり,深さの浮動小数点値を得るには,fixpt_depth/256.0となります.

CV_EXPORTS_AS() [1/2]

cv::CV_EXPORTS_AS ( connectedComponentsWithAlgorithm )

連結成分の計算 ブーリアンイメージのラベル付きイメージ

の連結成分ラベル付き画像を計算します. Nはラベルの総数 [0, N-1] を返し,0は背景ラベルを表します. ltypeは出力ラベルの画像タイプを指定します.これは,ラベルの総数,あるいはソース画像の総ピクセル数に基づく重要な考慮事項です. ccltypeは,使用する連結成分ラベル付けアルゴリズムを指定します.[Wu2009]に記載されているアルゴリズムがサポートされています。ConnectedComponentsAlgorithmsTypesを参照してください。なお,SAUFアルゴリズムでは,ラベルの行の主要な順序を強制しますが,BBDTでは強制しません.この関数は,GranaとWuのアルゴリズムの並列版を利用します.ただし,少なくとも1つの許可された並列フレームワークが有効であり,かつ,画像の行数がgetNumberOfCPUs.

引数
image ラベル付けされる8ビットシングルチャンネル画像
labels ラベル付けされる画像
connectivity 8方向または4方向の接続を表す8または4
ltype 出力画像のラベルタイプ.現在は CV_32S と CV_16U がサポートされています.
ccltype 連結成分アルゴリズムタイプ(以下の説明を参照してくださいConnectedComponentsAlgorithmsTypes).

CV_EXPORTS_AS() [2/2]

cv::CV_EXPORTS_AS ( connectedComponentsWithStatsWithAlgorithm )

は,ブーリアン画像の連結成分ラベル付き画像を計算し,各ラベルの統計出力も生成します.

ltype は,出力ラベルの画像タイプを指定します.これは,ラベルの総数,あるいは,ソース画像の総ピクセル数に基づく重要な検討事項です. ccltype は,使用する連結成分ラベル付けアルゴリズムを指定します.現在は,Granaのアルゴリズム(BBDT)とWuのアルゴリズム(SAUF)を使用しています.[Wu2009]に記載されているアルゴリズムがサポートされています。ConnectedComponentsAlgorithmsTypesを参照してください。なお,SAUFアルゴリズムでは,BBDTではなく,ラベルの行の主要な順序が強制されます.この関数は,少なくとも1つの許可された並列フレームワークが有効であり,かつ,画像の行数が連結成分アルゴリズムタイプで返される数の少なくとも2倍である場合,GranaとWuの両方のアルゴリズムの並列版(統計情報を含む)を利用します(以下を参照してください).getNumberOfCPUs.

引数
image ラベル付けされる8ビットシングルチャンネル画像
labels ラベル付けされる画像
stats 背景ラベルを含む,各ラベルの統計情報を出力します.統計情報にアクセスするには stats(label, COLUMN) を利用します.ConnectedComponentsTypesで,統計量を選択します.データタイプはCV_32Sです。
centroids 背景ラベルも含めた各ラベルのセントロイド出力.セントロイドへのアクセスは, x の場合は centroids(label, 0) , y の場合は centroids(label, 1) となります.
connectivity 8方向または4方向の接続を表す8または4
ltype 出力画像のラベルタイプ.現在は CV_32S と CV_16U がサポートされています.
ccltype 連結成分アルゴリズムタイプで返される数の2倍以上であれば,この関数は並列版を利用します(統計情報を含みます).ConnectedComponentsAlgorithmsTypes).

findContours() [1/2]

CV_EXPORTS void cv::findContours ( InputArray image,
OutputArrayOfArrays contours,
int mode,
int method,
Point offset = Point()
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

findContours() [2/2]

CV_EXPORTS_W void cv::findContours ( InputArray image,
OutputArrayOfArrays contours,
OutputArray hierarchy,
int mode,
int method,
Point offset = Point()
)

2値画像の輪郭を見つけます.

この関数は,以下のアルゴリズムを用いて,2値画像から輪郭を抽出します[Suzuki85].. 輪郭は,形状分析や物体の検出・認識に役立つツールです.OpenCV のサンプルディレクトリにある squares.cpp を参照してください.

覚え書き
opencv 3.2 以降では,この関数によってソース画像が変更されることはありません.
引数
image 8ビットのシングルチャンネル画像であるソース.0ではないピクセルは,1として扱われます.0のピクセルは0のままなので,画像は2値として扱われます.を使うことができます.compare,inRange,threshold,adaptiveThreshold,Cannyなどを使って,グレースケールやカラーの画像から2値画像を作ることができます.モードが次のような場合RETR_CCOMPまたは #RETR_FLOODFILL に等しい場合は,32ビット整数のラベル画像(CV_32SC1)を入力とすることもできます.
contours 検出された輪郭.各輪郭は,点のベクトル(例えば,std::vector<std::vector<cv::Point> >)として格納されます.
hierarchy オプションの出力ベクトル(例:std::vector<cv::Vec4i>)は,画像のトポロジーに関する情報を含みます.これは,輪郭の数と同じ数の要素を持ちます.i番目の各輪郭contours[i]に対して,要素hierarchy[i][0] , hierarchy[i][1] , hierarchy[i][2] , hierarchy[i][3]は,同じ階層レベルの次の輪郭と前の輪郭,最初の子輪郭と親輪郭の輪郭における0ベースのインデックスにそれぞれ設定される.輪郭iに対して,次の輪郭,前の輪郭,親の輪郭,または入れ子の輪郭がない場合,hierarchy[i]の対応する要素は,負の値になります。
mode 輪郭検索モード,参照RetrievalModes
method 輪郭の近似法,参照ContourApproximationModes
offset オプションで,各輪郭点を移動させるオフセットを指定します。これは,画像のROIから輪郭を抽出し,それを画像全体のコンテキストで分析する必要がある場合に役立ちます.

fitEllipse()

CV_EXPORTS_W RotatedRect cv::fitEllipse ( InputArray points )

2次元の点群の周りに楕円をフィットさせます.

この関数は,2次元点の集合に最もフィットする(最小二乗法で)楕円を計算します.そして,その楕円が内接する回転した矩形を返します.最初に紹介したアルゴリズムは[Fitzgibbon95]によって記述された最初のアルゴリズムが使われます。開発者は,返されたellipse/rotatedRectデータに負のインデックスが含まれている可能性があることを覚えておく必要があります。これは,データポイントが containingMat要素の境界に近いことが原因です。

引数
points 入力 2D ポイントセットは,std::vector<> または Timberape に格納されます.Mat

fitEllipseAMS()

CV_EXPORTS_W RotatedRect cv::fitEllipseAMS ( InputArray points )

2次元の点群の周りに楕円をフィットさせます.

この関数は,2 次元点群にフィットする楕円を計算します.楕円が内接する回転した矩形を返します。Taubin1991]によって提案された Approximate Mean Square (AMS)があります.[Taubin1991]によって提案されました。が使われます。

楕円の場合、この基底セットは$ \chi= \left(x^2, x y, y^2, x, y, 1\right) $であり,これは6つの自由係数の集合$ A^T=\left\{A_{\text{xx}},A_{\text{xy}},A_{\text{yy}},A_x,A_y,A_0\right\} $. しかし、楕円を指定するために必要なのは、長軸と短軸の長さ、位置、そして、長軸と短軸の長さの5つの数値である。$ (a,b) $位置$ (x_0,y_0) $位置,および方向の$ \theta $. これは、基底セットには、直線、二次曲線、放物線、双曲線、楕円関数が含まれているからです。フィットが放物線または双曲線関数であることが判明した場合は、標準法fitEllipse法を使用します。AMS法では、以下の条件を課すことで、フィットを放物線、双曲線、楕円曲線に限定しています。$ A^T ( D_x^T D_x + D_y^T D_y) A = 1 $ここで、マトリクス$ Dx $および$ Dy $は、設計行列$ D $行列は、セット内の各ポイントに以下を適用して行ごとに形成されます。

\begin{align*} D(i,:)&=\left\{x_i^2, x_i y_i, y_i^2, x_i, y_i, 1\right\} & D_x(i,:)&=\left\{2 x_i,y_i,0,1,0,0\right\} & D_y(i,:)&=\left\{0,x_i,2 y_i,0,1,0\right\} \end{align*}

AMS法は、コスト関数を最小化します。

\begin{equation*} \epsilon ^2=\frac{ A^T D^T D A }{ A^T (D_x^T D_x + D_y^T D_y) A^T } \end{equation*}

コストの最小値は、一般化された固有値問題を解くことで求められます。

\begin{equation*} D^T D A = \lambda \left( D_x^T D_x + D_y^T D_y\right) A \end{equation*}

引数
points 入力 2D ポイントセットは,std::vector<> または Timberape に格納されます.Mat

fitEllipseDirect()

CV_EXPORTS_W RotatedRect cv::fitEllipseDirect ( InputArray points )

2次元の点群の周りに楕円をフィットさせます.

この関数は,2 次元の点の集合に適合する楕円を計算します.楕円が内接する回転した長方形を返します。直接最小二乗法(Direct)は[Fitzgibbon1999].が使われます。

楕円の場合、この基底セットは$ \chi= \left(x^2, x y, y^2, x, y, 1\right) $であり,これは6つの自由係数の集合$ A^T=\left\{A_{\text{xx}},A_{\text{xy}},A_{\text{yy}},A_x,A_y,A_0\right\} $. しかし、楕円を指定するために必要なのは、長軸と短軸の長さ、位置、そして、長軸と短軸の長さの5つの数値である。$ (a,b) $位置$ (x_0,y_0) $位置,および方向の$ \theta $. これは、適合可能な基底セットとして、楕円関数だけでなく、直線、二次曲線、放物線、双曲線が含まれているからです。直接法では、次のことを保証することで、フィットを楕円に限定します。$ 4 A_{xx} A_{yy}- A_{xy}^2 > 0 $. 課せられた条件は$ 4 A_{xx} A_{yy}- A_{xy}^2=1 $これは不等式を満たすもので、係数を任意にスケーリングすることができるため、過度に制限するものではありません。

\begin{equation*} \epsilon ^2= A^T D^T D A \quad \text{with} \quad A^T C A =1 \quad \text{and} \quad C=\left(\begin{matrix} 0 & 0 & 2 & 0 & 0 & 0 \\ 0 & -1 & 0 & 0 & 0 & 0 \\ 2 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 \end{matrix} \right) \end{equation*}

コストの最小値は、一般化された固有値問題を解くことで求められます。

\begin{equation*} D^T D A = \lambda \left( C\right) A \end{equation*}

このシステムでは、1つの正の固有値$ \lambda$これを解として選択し、その固有ベクトルを$\mathbf{u}$. これらを用いて係数を求めます。

\begin{equation*} A = \sqrt{\frac{1}{\mathbf{u}^T C \mathbf{u}}} \mathbf{u} \end{equation*}

スケーリング・ファクターは以下を保証します。$A^T C A =1$.

引数
points 入力 2D ポイントセットは,std::vector<> または Timberape に格納されます.Mat

fitLine()

CV_EXPORTS_W void cv::fitLine ( InputArray points,
OutputArray line,
int distType,
double param,
double reps,
double aeps
)

直線を2次元あるいは3次元の点群にフィットさせます.

関数 fitLine は,2D または 3D の点群に直線をフィットさせます.$\sum_i \rho(r_i)$ここで$r_i$は,点と線との距離です.$i^{th}$点と線との距離$\rho(r)$は距離関数で,以下のいずれかです.

  • DIST_L2

    \[\rho (r) = r^2/2 \quad \text{(the simplest and the fastest least-squares method)}\]

  • DIST_L1

    \[\rho (r) = r\]

  • DIST_L12

    \[\rho (r) = 2 \cdot ( \sqrt{1 + \frac{r^2}{2}} - 1)\]

  • DIST_FAIR

    \[\rho \left (r \right ) = C^2 \cdot \left ( \frac{r}{C} - \log{\left(1 + \frac{r}{C}\right)} \right ) \quad \text{where} \quad C=1.3998\]

  • DIST_WELSCH

    \[\rho \left (r \right ) = \frac{C^2}{2} \cdot \left ( 1 - \exp{\left(-\left(\frac{r}{C}\right)^2\right)} \right ) \quad \text{where} \quad C=2.9846\]

  • DIST_HUBER

    \[\rho (r) = \fork{r^2/2}{if \‍(r < C\‍)}{C \cdot (r-C/2)}{otherwise} \quad \text{where} \quad C=1.345\]

このアルゴリズムは,M-estimator (http://en.wikipedia.org/wiki/M-estimator)技術に基づいており、重み付き最小二乗法アルゴリズムを使用して直線を反復的にフィットさせます。各反復の後、重みは$w_i$に反比例するように調整されます。$\rho(r_i)$.

引数
points std::vector<>に格納された2Dまたは3D点の入力ベクトル,またはMat.
line 出力ラインのパラメータ。2Dフィッティングの場合、入力ベクトルは4要素のベクトル(Vec4fなど) - (vx, vy, x0, y0)でなければなりません。ここで、(vx, vy)は直線に平行な正規化されたベクトル、(x0, y0)は直線上の点です。3Dフィッティングの場合は、6要素のベクトル(Vec6fなど) - (vx, vy, vz, x0, y0, z0)とし、(vx, vy, vz)は線に平行な正規化ベクトル、(x0, y0, z0)は線上の点とします。
distType M-estimatorで使用される距離、参照DistanceTypes
param いくつかのタイプの距離の数値パラメータ(C)。0の場合は最適な値が選ばれます。
reps 半径(座標原点から直線までの距離)は十分な精度があります。
aeps 角度に十分な精度があること。repsとaepsのデフォルト値は0.01が良いでしょう。

HuMoments() [1/2]

CV_EXPORTS_W void cv::HuMoments ( const Moments & m,
OutputArray hu
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

HuMoments() [2/2]

CV_EXPORTS void cv::HuMoments ( const Moments & moments,
double hu[7]
)

7つのHu不変量を計算します。

この関数は7つのHuの不変量を計算します(紹介されているのは[Hu62]で紹介されている。参照http://en.wikipedia.org/wiki/Image_moment) として定義されている。

\[\begin{array}{l} hu[0]= \eta _{20}+ \eta _{02} \\ hu[1]=( \eta _{20}- \eta _{02})^{2}+4 \eta _{11}^{2} \\ hu[2]=( \eta _{30}-3 \eta _{12})^{2}+ (3 \eta _{21}- \eta _{03})^{2} \\ hu[3]=( \eta _{30}+ \eta _{12})^{2}+ ( \eta _{21}+ \eta _{03})^{2} \\ hu[4]=( \eta _{30}-3 \eta _{12})( \eta _{30}+ \eta _{12})[( \eta _{30}+ \eta _{12})^{2}-3( \eta _{21}+ \eta _{03})^{2}]+(3 \eta _{21}- \eta _{03})( \eta _{21}+ \eta _{03})[3( \eta _{30}+ \eta _{12})^{2}-( \eta _{21}+ \eta _{03})^{2}] \\ hu[5]=( \eta _{20}- \eta _{02})[( \eta _{30}+ \eta _{12})^{2}- ( \eta _{21}+ \eta _{03})^{2}]+4 \eta _{11}( \eta _{30}+ \eta _{12})( \eta _{21}+ \eta _{03}) \\ hu[6]=(3 \eta _{21}- \eta _{03})( \eta _{21}+ \eta _{03})[3( \eta _{30}+ \eta _{12})^{2}-( \eta _{21}+ \eta _{03})^{2}]-( \eta _{30}-3 \eta _{12})( \eta _{21}+ \eta _{03})[3( \eta _{30}+ \eta _{12})^{2}-( \eta _{21}+ \eta _{03})^{2}] \\ \end{array}\]

ここで$\eta_{ji}$を表します.$\texttt{Moments::nu}_{ji}$.

これらの値は、画像のスケール、回転、反射に対して不変であることが証明された。この不変性は,画像の解像度が無限大であることを仮定して証明されています.ラスター画像の場合,元の画像と変換後の画像のHu不変量の計算方法は少し異なります.

引数
moments 入力 moments で計算されたモーメント.
hu 出力 Hu 不変量.
参照
matchShapes

intersectConvexConvex()

CV_EXPORTS_W float cv::intersectConvexConvex ( InputArray p1,
InputArray p2,
OutputArray p12,
bool handleNested = true
)

2つの凸状の多角形の交点を求める

引数
p1 第1の多角形
p2 第2多角形
p12 交差する部分を表す多角形を出力
handleNested 真の場合、一方の多角形が他方の多角形に完全に囲まれていれば交点が見つかります。falseの場合、交点は見つかりません。一方のポリゴンの頂点が他方のポリゴンの辺上にある場合、これらのポリゴンは入れ子になっていないとみなされ、handleNestedの値に関わらず交点が検出されます。
戻り値
交差する多角形の面積の絶対値
覚え書き
intersectConvexConvexは、両方のポリゴンが凸であるかどうかを確認せず、凸でない場合は無効な結果を返します。

isContourConvex()

CV_EXPORTS_W bool cv::isContourConvex ( InputArray contour )

輪郭の凸性をテストします。

この関数は,入力された輪郭が凸であるかどうかをテストします.輪郭は単純でなければならず,つまり,自己交差があってはいけません.そうでない場合,この関数の出力は未定義です.

引数
contour 入力: 2次元点のベクトル,std::vector<>に格納される.Mat

matchShapes()

CV_EXPORTS_W double cv::matchShapes ( InputArray contour1,
InputArray contour2,
int method,
double parameter
)

2つの形状を比較します。

この関数は,2つの形状を比較します.実装されている3つの手法は,いずれもHuの不変量を利用します(以下を参照してください).HuMoments)

引数
contour1 1つ目の輪郭またはグレースケール画像.
contour2 2つ目の輪郭またはグレースケール画像.
method 比較方法についてはShapeMatchModes
parameter メソッド固有のパラメータ(現在はサポートされていません).

minAreaRect()

CV_EXPORTS_W RotatedRect cv::minAreaRect ( InputArray points )

入力された2次元点群を囲む,最小面積の回転した矩形を求めます.

この関数は,指定された点群を囲む最小面積の外接矩形(回転している場合もあります)を計算して返します.開発者は,返されるRotatedRectは,データが要素の境界に近い場合,負のインデックスを含むことがあります.Mat要素の境界に近い場合、負のインデックスを含む可能性があることに注意してください。

引数
points 入力: 2次元点のベクトル,std::vector<>に格納される.Mat

minEnclosingCircle()

CV_EXPORTS_W void cv::minEnclosingCircle ( InputArray points,
CV_OUT Point2f & center,
CV_OUT float & radius
)

2次元点群を囲む最小面積の円を求めます.

この関数は,反復アルゴリズムを使って,2次元点集合を囲む最小の円を求めます.

引数
points 入力: 2次元点のベクトル,std::vector<>に格納される.Mat
center 円の中心を出力します。
radius 円の半径を出力します.

minEnclosingTriangle()

CV_EXPORTS_W double cv::minEnclosingTriangle ( InputArray points,
CV_OUT OutputArray triangle
)

2次元点集合を囲む最小面積の三角形を求め、その面積を返します。

この関数は,与えられた2次元点集合を囲む最小面積の三角形を求め,その面積を返します.与えられた2次元点集合に対する出力は以下の図のようになります。2次元点は赤*で、それを囲む三角形は黄色.

Sample output of the minimum enclosing triangle function

このアルゴリズムの実装には、O'Rourkeの[ORourke86]に基づいています。とKlee and Laskowskiの[KleeLaskowski85]の論文を参考にしています。の論文を参考にしています.O'Rourkeは$\theta(n)$n個の頂点を持つ2次元凸多角形の最小囲み三角形を求めるアルゴリズムを提供している.この関数はminEnclosingTriangleこの関数は2次元点集合を入力とするため,2次元点集合の凸包を計算するという追加の前処理が必要になります.この関数の複雑さはconvexHull関数の複雑さは$O(n log(n))$であり,これは$\theta(n)$. したがって,この関数の全体的な複雑さは$O(n log(n))$.

引数
points 深さ CV_32S または CV_32F の2次元点の入力ベクトル(std::vector<> またはMat
triangle 三角形の頂点を定義する3つの2次元点の出力ベクトル.OutputArrayの深さは,CV_32Fでなければいけません.

moments()

CV_EXPORTS_W Moments cv::moments ( InputArray array,
bool binaryImage = false
)

ポリゴンやラスタライズされた形状の,3次までのすべてのモーメントを計算します.

この関数は,ベクトル形状やラスタライズされた形状の,3次までのモーメントを計算します.その結果は,次のような構造体で返されますcv::Moments.

引数
array ラスタ画像(シングルチャンネル,8ビット,または浮動小数点型の2次元配列),または2次元点の配列($1 \times N$または$N \times 1$) の2次元点(Point または Point2f )の配列で返されます.
binaryImage true の場合,0 ではない画像のピクセルはすべて 1 として扱われます.このパラメータは,画像に対してのみ使用されます.
戻り値
モーメント。
覚え書き
Pythonバインディングによる輪郭のモーメント計算にのみ適用されます。入力配列の numpy 型は np.int32 か np.float32 でなければならないことに注意してください。
参照
contourArea,arcLength

pointPolygonTest()

CV_EXPORTS_W double cv::pointPolygonTest ( InputArray contour,
Point2f pt,
bool measureDist
)

Point-in-contourテストを行います。

この関数は,点が輪郭の内側にあるのか,外側にあるのか,あるいは辺上にあるのか(あるいは頂点と重なっているのか)を判定します.対応して、正の値(内側)、負の値(外側)、ゼロ(エッジ上)を返します。measureDist=false の場合、戻り値はそれぞれ +1、-1、0 です。それ以外の場合、戻り値は、点と最も近い輪郭のエッジとの間の符号付き距離になります。

この関数の出力例として,画像の各ピクセルが輪郭に対してテストされる様子を以下に示します.

sample output

引数
contour 入力輪郭。
pt Point tested against the contour.
measureDist true の場合,この関数は,点から最も近い輪郭の端までの符号付き距離を推定します.そうでない場合は,その点が輪郭の内側にあるかどうかのみをチェックします.

rotatedRectangleIntersection()

CV_EXPORTS_W int cv::rotatedRectangleIntersection ( const RotatedRect & rect1,
const RotatedRect & rect2,
OutputArray intersectingRegion
)

回転させた2つの矩形に交点が存在するかどうかを調べます.

交差がある場合は,交差する領域の頂点も返されます.

以下は、交点の構成の例です。ハッチングされたパターンは交差する領域を示し、赤い頂点がこの関数によって返されます。

intersection examples

引数
rect1 第一の四角形
rect2 2番目の矩形
intersectingRegion 交差領域の頂点の出力配列です。最大で8個の頂点が返されます。std::vector<cv::Point2f> として格納されます.cv::MatCV_32FC2 型の Mx1 として格納されます.
戻り値
1つのRectanglesIntersectTypes