OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
構造解析と形状記述子

詳細説明

名前空間

namespace  cv::traits
 

クラス

class  cv::GeneralizedHough
 一般化ハフ変換を用いてグレースケール画像中の任意のテンプレートを検出する 詳細...
 
class  cv::GeneralizedHoughBallard
 一般化ハフ変換を用いてグレースケール画像中の任意のテンプレートを検出する 詳細...
 
class  cv::GeneralizedHoughGuil
 一般化ハフ変換を用いてグレースケール画像中の任意のテンプレートを検出する 詳細...
 
class  cv::Moments
 cv::moments が返す構造体 詳細...
 

列挙型

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::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
}
 連結成分の統計情報 詳細...
 
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::RectanglesIntersectTypes {
  cv::INTERSECT_NONE = 0 ,
  cv::INTERSECT_PARTIAL = 1 ,
  cv::INTERSECT_FULL = 2
}
 矩形間の交差の種類 詳細...
 
enum  cv::RetrievalModes {
  cv::RETR_EXTERNAL = 0 ,
  cv::RETR_LIST = 1 ,
  cv::RETR_CCOMP = 2 ,
  cv::RETR_TREE = 3 ,
  cv::RETR_FLOODFILL = 4
}
 輪郭取得アルゴリズムのモード 詳細...
 
enum  cv::ShapeMatchModes {
  cv::CONTOURS_MATCH_I1 =1 ,
  cv::CONTOURS_MATCH_I2 =2 ,
  cv::CONTOURS_MATCH_I3 =3
}
 形状マッチングの手法。 詳細...
 

関数

void cv::approxPolyDP (InputArray curve, OutputArray approxCurve, double epsilon, bool closed)
 指定した精度で多角形曲線を近似する。
 
void cv::approxPolyN (InputArray curve, OutputArray approxCurve, int nsides, float epsilon_percentage=-1.0, bool ensure_convex=true)
 指定した精度と辺数で凸包により多角形を近似する。
 
double cv::arcLength (InputArray curve, bool closed)
 輪郭の周囲長または曲線の長さを計算する。
 
Rect cv::boundingRect (InputArray array)
 点集合またはグレースケール画像の非ゼロピクセルの正立バウンディング矩形を計算する。
 
void cv::boxPoints (RotatedRect box, OutputArray points)
 回転矩形の4つの頂点を求める。回転矩形の描画に役立つ。
 
int cv::connectedComponents (InputArray image, OutputArray labels, int connectivity, int ltype, int ccltype)
 ブール画像の連結成分ラベリング画像を計算する
 
int cv::connectedComponents (InputArray image, OutputArray labels, int connectivity=8, int ltype=CV_32S)
 
int cv::connectedComponentsWithStats (InputArray image, OutputArray labels, OutputArray stats, OutputArray centroids, int connectivity, int ltype, int ccltype)
 ブール画像の連結成分ラベリング画像を計算し、各ラベルごとの統計情報も出力する
 
int cv::connectedComponentsWithStats (InputArray image, OutputArray labels, OutputArray stats, OutputArray centroids, int connectivity=8, int ltype=CV_32S)
 
double cv::contourArea (InputArray contour, bool oriented=false)
 輪郭の面積を計算する。
 
void cv::convexHull (InputArray points, OutputArray hull, bool clockwise=false, bool returnPoints=true)
 点集合の凸包を求める。
 
void cv::convexityDefects (InputArray contour, InputArray convexhull, OutputArray convexityDefects)
 輪郭の凸性欠陥を求める。
 
Ptr< GeneralizedHoughBallardcv::createGeneralizedHoughBallard ()
 cv::GeneralizedHoughBallard クラスへのスマートポインタを生成して初期化する。
 
Ptr< GeneralizedHoughGuilcv::createGeneralizedHoughGuil ()
 cv::GeneralizedHoughGuil クラスへのスマートポインタを生成して初期化する。
 
void cv::findContours (InputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset=Point())
 
void cv::findContours (InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())
 2値画像から輪郭を検出する。
 
void cv::findContoursLinkRuns (InputArray image, OutputArrayOfArrays contours)
 これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは受け取る引数のみが異なる。
 
void cv::findContoursLinkRuns (InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy)
 linkランアルゴリズムを用いて輪郭を検出する。
 
RotatedRect cv::fitEllipse (InputArray points)
 2次元点群に楕円をフィッティングする。
 
RotatedRect cv::fitEllipseAMS (InputArray points)
 2次元点群に楕円をフィッティングする。
 
RotatedRect cv::fitEllipseDirect (InputArray points)
 2次元点群に楕円をフィッティングする。
 
void cv::fitLine (InputArray points, OutputArray line, int distType, double param, double reps, double aeps)
 2次元または3次元の点群に直線をフィッティングする。
 
void cv::getClosestEllipsePoints (const RotatedRect &ellipse_params, InputArray points, OutputArray closest_pts)
 各2次元点について、指定した楕円上にある最も近い2次元点を計算する。
 
void cv::HuMoments (const Moments &m, OutputArray hu)
 
void cv::HuMoments (const Moments &moments, double hu[7])
 7つのHu不変モーメントを計算する。
 
float cv::intersectConvexConvex (InputArray p1, InputArray p2, OutputArray p12, bool handleNested=true)
 2つの凸多角形の交差を求める。
 
bool cv::isContourConvex (InputArray contour)
 輪郭の凸性を判定する。
 
double cv::matchShapes (InputArray contour1, InputArray contour2, int method, double parameter)
 2つの形状を比較する。
 
RotatedRect cv::minAreaRect (InputArray points)
 入力された2次元点群を囲む最小面積の回転矩形を求める。
 
void cv::minEnclosingCircle (InputArray points, Point2f &center, float &radius)
 2次元点群を囲む最小面積の円を求める。
 
double cv::minEnclosingConvexPolygon (InputArray points, OutputArray polygon, int k)
 2次元点群を囲む最小面積の凸多角形を求め、その面積を返す。
 
double cv::minEnclosingTriangle (InputArray points, OutputArray triangle)
 2次元点群を囲む最小面積の三角形を求め、その面積を返す。
 
Moments cv::moments (InputArray array, bool binaryImage=false)
 多角形またはラスタライズされた形状について、3次までのすべてのモーメントを計算する。
 
double cv::pointPolygonTest (InputArray contour, Point2f pt, bool measureDist)
 点が輪郭内にあるかどうかのテストを行う。
 
int cv::rotatedRectangleIntersection (const RotatedRect &rect1, const RotatedRect &rect2, OutputArray intersectingRegion)
 2つの回転矩形の間に交差があるかどうかを調べる。
 

列挙型詳解

◆ ConnectedComponentsAlgorithmsTypes

#include <opencv2/imgproc.hpp>

連結成分アルゴリズム

列挙値
CCL_DEFAULT 
Python: cv.CCL_DEFAULT

8連結に対しては Spaghetti [33] アルゴリズム、4連結に対しては Spaghetti4C [34] アルゴリズム。

CCL_WU 
Python: cv.CCL_WU

8連結に対しては SAUF [306] アルゴリズム、4連結に対しては SAUF アルゴリズム。[32] で説明されている並列実装が SAUF で利用可能である。

CCL_GRANA 
Python: cv.CCL_GRANA

8連結に対しては BBDT [112] アルゴリズム、4連結に対しては SAUF アルゴリズム。[32] で説明されている並列実装が BBDT と SAUF の両方で利用可能である。

CCL_BOLELLI 
Python: cv.CCL_BOLELLI

8連結に対しては Spaghetti [33] アルゴリズム、4連結に対しては Spaghetti4C [34] アルゴリズム。[32] で説明されている並列実装が Spaghetti と Spaghetti4C の両方で利用可能である。

CCL_SAUF 
Python: cv.CCL_SAUF

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

CCL_BBDT 
Python: cv.CCL_BBDT

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

CCL_SPAGHETTI 
Python: cv.CCL_SPAGHETTI

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

◆ ConnectedComponentsTypes

#include <opencv2/imgproc.hpp>

連結成分の統計情報

列挙値
CC_STAT_LEFT 
Python: cv.CC_STAT_LEFT

水平方向のバウンディングボックスの開始位置(その位置を含む)を表す最も左の (x) 座標。

CC_STAT_TOP 
Python: cv.CC_STAT_TOP

垂直方向のバウンディングボックスの開始位置(その位置を含む)を表す最も上の (y) 座標。

CC_STAT_WIDTH 
Python: cv.CC_STAT_WIDTH

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

CC_STAT_HEIGHT 
Python: cv.CC_STAT_HEIGHT

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

CC_STAT_AREA 
Python: cv.CC_STAT_AREA

連結成分の総面積(ピクセル単位)。

◆ ContourApproximationModes

#include <opencv2/imgproc.hpp>

輪郭近似アルゴリズム

列挙値
CHAIN_APPROX_NONE 
Python: cv.CHAIN_APPROX_NONE

すべての輪郭点を漏れなく格納する。すなわち、輪郭上の連続する任意の2点 (x1,y1) と (x2,y2) は、水平・垂直・斜めのいずれかで隣接しており、max(abs(x1-x2),abs(y2-y1))==1 を満たす。

CHAIN_APPROX_SIMPLE 
Python: cv.CHAIN_APPROX_SIMPLE

水平・垂直・斜めの線分を圧縮し、それらの端点のみを残す。例えば、上向きの直立した矩形の輪郭は4点で符号化される。

CHAIN_APPROX_TC89_L1 
Python: cv.CHAIN_APPROX_TC89_L1

Teh-Chinチェーン近似アルゴリズムのいずれかのバリエーションを適用する [272]

CHAIN_APPROX_TC89_KCOS 
Python: cv.CHAIN_APPROX_TC89_KCOS

Teh-Chinチェーン近似アルゴリズムのいずれかのバリエーションを適用する [272]

◆ RectanglesIntersectTypes

#include <opencv2/imgproc.hpp>

矩形間の交差の種類

列挙値
INTERSECT_NONE 
Python: cv.INTERSECT_NONE

交差なし。

INTERSECT_PARTIAL 
Python: cv.INTERSECT_PARTIAL

部分的な交差がある。

INTERSECT_FULL 
Python: cv.INTERSECT_FULL

一方の矩形がもう一方に完全に内包されている。

◆ RetrievalModes

#include <opencv2/imgproc.hpp>

輪郭取得アルゴリズムのモード

列挙値
RETR_EXTERNAL 
Python: cv.RETR_EXTERNAL

最も外側の輪郭のみを取得する。すべての輪郭について hierarchy[i][2]=hierarchy[i][3]=-1 を設定する。

RETR_LIST 
Python: cv.RETR_LIST

階層関係を構築せずに、すべての輪郭を取得する。

RETR_CCOMP 
Python: cv.RETR_CCOMP

すべての輪郭を取得し、2レベルの階層に整理する。トップレベルには成分の外側の境界があり、第2レベルには穴の境界がある。連結成分の穴の内側にさらに別の輪郭がある場合でも、それはトップレベルに置かれる。

RETR_TREE 
Python: cv.RETR_TREE

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

RETR_FLOODFILL 
Python: cv.RETR_FLOODFILL

◆ ShapeMatchModes

#include <opencv2/imgproc.hpp>

形状マッチングの手法。

\(A\) はobject1を、\(B\) はobject2を表す

\(\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\) はそれぞれ \(A\) と \(B\) のHuモーメントである。

列挙値
CONTOURS_MATCH_I1 
Python: cv.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 
Python: cv.CONTOURS_MATCH_I2

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

CONTOURS_MATCH_I3 
Python: cv.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()

void cv::approxPolyDP ( InputArray curve,
OutputArray approxCurve,
double epsilon,
bool closed )
Python:
cv.approxPolyDP(curve, epsilon, closed[, approxCurve]) -> approxCurve

#include <opencv2/imgproc.hpp>

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

cv::approxPolyDP 関数は、曲線または多角形を、頂点数のより少ない別の曲線/多角形で近似する。両者の距離が指定された精度以下になるようにする。Douglas-Peuckerアルゴリズムを使用する https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm

引数
curvestd::vector または Mat に格納された2次元点の入力ベクトル
approxCurve近似の結果。型は入力曲線の型と一致する必要がある。
epsilon近似精度を指定する引数。これは元の曲線とその近似との間の最大距離である。
closedtrue の場合、近似された曲線は閉曲線となる(最初と最後の頂点が接続される)。そうでない場合は閉じない。

◆ approxPolyN()

void cv::approxPolyN ( InputArray curve,
OutputArray approxCurve,
int nsides,
float epsilon_percentage = -1.0,
bool ensure_convex = true )
Python:
cv.approxPolyN(curve, nsides[, approxCurve[, epsilon_percentage[, ensure_convex]]]) -> approxCurve

#include <opencv2/imgproc.hpp>

指定された精度と辺数で、多角形を凸包で近似する。

cv::approxPolyN 関数は、元の輪郭の輪郭面積と新しい多角形との差が最小になるように、多角形を凸包で近似する。追加される面積が最小になるように2つの頂点を1つに収縮させる貪欲法を用いる。凸輪郭の各辺が形成する直線を引き、その結果生じる三角形の面積を考慮する。各頂点は元の輪郭上にあるか、その外側にある。

論文 [154] に基づくアルゴリズム。

引数
curvestd::vector または Mat に格納された2次元点の入力ベクトル。点は float または整数でなければならない。
approxCurve近似の結果。型は std::vector または Mat に格納された2次元点(Point2f または Point)のベクトルである。
nsides結果の多角形の辺の数を定義する引数。
epsilon_percentage追加面積の最大値の割合を定義する。-1 の場合は使用されない。そうでない場合、追加面積が contourArea(_curve) * percentage を超えるとアルゴリズムは停止する。追加面積が制限を超えた場合、アルゴリズムは制限を超えた時点で存在していた数だけの頂点を返す。
ensure_convextrue の場合、アルゴリズムは入力輪郭の凸包を作成する。そうでない場合、入力ベクトルは凸でなければならない。

◆ arcLength()

double cv::arcLength ( InputArray curve,
bool closed )
Python:
cv.arcLength(curve, closed) -> retval

#include <opencv2/imgproc.hpp>

輪郭の周囲長または曲線の長さを計算する。

この関数は、曲線の長さまたは閉じた輪郭の周囲長を計算する。

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

◆ boundingRect()

Rect cv::boundingRect ( InputArray array)
Python:
cv.boundingRect(array) -> retval

#include <opencv2/imgproc.hpp>

点集合またはグレースケール画像の非ゼロピクセルに対する上向き(傾きのない)バウンディング矩形を計算する。

この関数は、指定された点集合またはグレースケール画像の非ゼロピクセルに対する最小の上向き(傾きのない)バウンディング矩形を計算して返す。

引数
array入力グレースケール画像、または std::vector か Mat に格納された2次元点集合。

◆ boxPoints()

void cv::boxPoints ( RotatedRect box,
OutputArray points )
Python:
cv.boxPoints(box[, points]) -> points

#include <opencv2/imgproc.hpp>

回転矩形の4つの頂点を求める。回転矩形を描画する際に便利。

この関数は、回転矩形の4つの頂点を求める。4つの頂点は、\(y\) が最大の点から始まり時計回りの順序で返される。2つの点が同じ \(y\) 座標を持つ場合は、最も右の点が開始点となる。この関数は矩形を描画する際に便利である。C++では、この関数を使う代わりに、RotatedRect::points メソッドを直接使用できる。詳細については、バウンディング回転矩形と楕円の作成に関するチュートリアルを参照のこと。

引数
box入力の回転矩形。minAreaRect の出力でもよい。
points矩形の4頂点の出力配列。

◆ connectedComponents() [1/2]

int cv::connectedComponents ( InputArray image,
OutputArray labels,
int connectivity,
int ltype,
int ccltype )
Python:
cv.connectedComponents(image[, labels[, connectivity[, ltype]]]) -> retval, labels
cv.connectedComponentsWithAlgorithm(image, connectivity, ltype, ccltype[, labels]) -> retval, labels

#include <opencv2/imgproc.hpp>

ブール画像の連結成分ラベリング画像を計算する

4連結または8連結の画像 - 全ラベル数 N を返す。[0, N-1] の範囲で、0は背景ラベルを表す。ltypeは出力ラベル画像の型を指定し、これは全ラベル数、あるいは入力画像の総ピクセル数に基づく重要な考慮事項である。ccltypeは使用する連結成分ラベリングアルゴリズムを指定する。現在、Bolelli (Spaghetti) [33]、Grana (BBDT) [112]、Wu (SAUF) [306] のアルゴリズムがサポートされている。詳細は ConnectedComponentsAlgorithmsTypes を参照のこと。SAUFアルゴリズムはラベルを行優先順に強制するが、SpaghettiとBBDTはそうではない点に注意。この関数は、少なくとも1つの利用可能な並列フレームワークが有効で、かつ画像の行数が getNumberOfCPUs が返す値の少なくとも2倍ある場合に、アルゴリズムの並列版を使用する。

引数
imageラベル付けの対象となる8ビットシングルチャンネル画像
labelsラベル付けされた出力画像
connectivity8連結の場合は 8、4連結の場合は 4
ltype出力画像のラベル型。現在は CV_32S と CV_16U がサポートされている。
ccltype連結成分アルゴリズムの種類(ConnectedComponentsAlgorithmsTypes を参照)。

◆ connectedComponents() [2/2]

int cv::connectedComponents ( InputArray image,
OutputArray labels,
int connectivity = 8,
int ltype = CV_32S )
Python:
cv.connectedComponents(image[, labels[, connectivity[, ltype]]]) -> retval, labels
cv.connectedComponentsWithAlgorithm(image, connectivity, ltype, ccltype[, labels]) -> retval, labels

#include <opencv2/imgproc.hpp>

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
imageラベル付けの対象となる8ビットシングルチャンネル画像
labelsラベル付けされた出力画像
connectivity8連結の場合は 8、4連結の場合は 4
ltype出力画像のラベル型。現在は CV_32S と CV_16U がサポートされている。

◆ connectedComponentsWithStats() [1/2]

int cv::connectedComponentsWithStats ( InputArray image,
OutputArray labels,
OutputArray stats,
OutputArray centroids,
int connectivity,
int ltype,
int ccltype )
Python:
cv.connectedComponentsWithStats(image[, labels[, stats[, centroids[, connectivity[, ltype]]]]]) -> retval, labels, stats, centroids
cv.connectedComponentsWithStatsWithAlgorithm(image, connectivity, ltype, ccltype[, labels[, stats[, centroids]]]) -> retval, labels, stats, centroids

#include <opencv2/imgproc.hpp>

ブール画像の連結成分ラベリング画像を計算し、さらに各ラベルの統計情報を出力する

4連結または8連結の画像 - 全ラベル数 N を返す。[0, N-1] の範囲で、0は背景ラベルを表す。ltypeは出力ラベル画像の型を指定し、これは全ラベル数、あるいは入力画像の総ピクセル数に基づく重要な考慮事項である。ccltypeは使用する連結成分ラベリングアルゴリズムを指定する。現在、Bolelli (Spaghetti) [33]、Grana (BBDT) [112]、Wu (SAUF) [306] のアルゴリズムがサポートされている。詳細は ConnectedComponentsAlgorithmsTypes を参照のこと。SAUFアルゴリズムはラベルを行優先順に強制するが、SpaghettiとBBDTはそうではない点に注意。この関数は、少なくとも1つの利用可能な並列フレームワークが有効で、かつ画像の行数が getNumberOfCPUs が返す値の少なくとも2倍ある場合に、アルゴリズムの並列版(統計情報を含む)を使用する。

引数
imageラベル付けの対象となる8ビットシングルチャンネル画像
labelsラベル付けされた出力画像
stats背景ラベルを含む各ラベルの統計出力。統計は stats(label, COLUMN) でアクセスする。COLUMN は統計量を選択する ConnectedComponentsTypes のいずれかである。データ型は CV_32S である。
centroids背景ラベルを含む各ラベルの重心出力。重心は x については centroids(label, 0)、y については centroids(label, 1) でアクセスする。データ型は CV_64F である。
connectivity8連結の場合は 8、4連結の場合は 4
ltype出力画像のラベル型。現在は CV_32S と CV_16U がサポートされている。
ccltype連結成分アルゴリズムの種類(ConnectedComponentsAlgorithmsTypes を参照)。

◆ connectedComponentsWithStats() [2/2]

int cv::connectedComponentsWithStats ( InputArray image,
OutputArray labels,
OutputArray stats,
OutputArray centroids,
int connectivity = 8,
int ltype = CV_32S )
Python:
cv.connectedComponentsWithStats(image[, labels[, stats[, centroids[, connectivity[, ltype]]]]]) -> retval, labels, stats, centroids
cv.connectedComponentsWithStatsWithAlgorithm(image, connectivity, ltype, ccltype[, labels[, stats[, centroids]]]) -> retval, labels, stats, centroids

#include <opencv2/imgproc.hpp>

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
imageラベル付けの対象となる8ビットシングルチャンネル画像
labelsラベル付けされた出力画像
stats背景ラベルを含む各ラベルの統計出力。統計は stats(label, COLUMN) でアクセスする。COLUMN は統計量を選択する ConnectedComponentsTypes のいずれかである。データ型は CV_32S である。
centroids背景ラベルを含む各ラベルの重心出力。重心は x については centroids(label, 0)、y については centroids(label, 1) でアクセスする。データ型は CV_64F である。
connectivity8連結の場合は 8、4連結の場合は 4
ltype出力画像のラベル型。現在は CV_32S と CV_16U がサポートされている。

◆ contourArea()

double cv::contourArea ( InputArray contour,
bool oriented = false )
Python:
cv.contourArea(contour[, oriented]) -> retval

#include <opencv2/imgproc.hpp>

輪郭の面積を計算する。

この関数は輪郭の面積を計算する。momentsと同様に、面積はグリーンの公式を用いて計算される。したがって、返される面積と、drawContoursfillPoly で輪郭を描画した場合の非ゼロピクセル数とは異なる場合がある。また、自己交差を持つ輪郭に対しては、この関数はほぼ確実に誤った結果を返す。

例:

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;
Point_< float > Point2f
Definition types.hpp:207
void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)
Approximates a polygonal curve(s) with the specified precision.
double contourArea(InputArray contour, bool oriented=false)
Calculates a contour area.
引数
contourstd::vector または Mat に格納された2次元点(輪郭の頂点)の入力ベクトル。
oriented符号付き面積フラグ。true の場合、関数は輪郭の向き(時計回りまたは反時計回り)に応じて符号付きの面積値を返す。この機能を使うと、面積の符号から輪郭の向きを判定できる。デフォルトではこの引数は false で、絶対値が返される。

◆ convexHull()

void cv::convexHull ( InputArray points,
OutputArray hull,
bool clockwise = false,
bool returnPoints = true )
Python:
cv.convexHull(points[, hull[, clockwise[, returnPoints]]]) -> hull

#include <opencv2/imgproc.hpp>

点集合の凸包を求める。

cv::convexHull 関数は、現在の実装で O(N logN) の計算量を持つSklanskyのアルゴリズム [253] を用いて、2次元の点集合の凸包を求める。

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

詳細については 対応するチュートリアル を確認のこと。

参考リンク:

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

◆ convexityDefects()

void cv::convexityDefects ( InputArray contour,
InputArray convexhull,
OutputArray convexityDefects )
Python:
cv.convexityDefects(contour, convexhull[, convexityDefects]) -> convexityDefects

#include <opencv2/imgproc.hpp>

輪郭の凸性欠陥を求める。

下図は手の輪郭の凸性欠陥を表示している:

image
引数
contour入力輪郭。
convexhullconvexHull を使って得られた凸包。凸包を構成する輪郭点のインデックスを含む必要がある。
convexityDefects凸性欠陥の出力ベクトル。C++ および新しい Python/Java インターフェースでは、各凸性欠陥は4要素の整数ベクトル(すなわち Vec4i)として表現される: (start_index, end_index, farthest_pt_index, fixpt_depth)。ここでインデックスは、凸性欠陥の始点・終点・最遠点の元の輪郭における0始まりのインデックスであり、fixpt_depth は最遠輪郭点と凸包との距離の固定小数点近似(8ビットの小数部を持つ)である。すなわち、深さの浮動小数点値を得るには fixpt_depth/256.0 とする。

◆ createGeneralizedHoughBallard()

Ptr< GeneralizedHoughBallard > cv::createGeneralizedHoughBallard ( )
Python:
cv.createGeneralizedHoughBallard() -> retval

#include <opencv2/imgproc.hpp>

cv::GeneralizedHoughBallard クラスへのスマートポインタを生成し、初期化する。

◆ createGeneralizedHoughGuil()

Ptr< GeneralizedHoughGuil > cv::createGeneralizedHoughGuil ( )
Python:
cv.createGeneralizedHoughGuil() -> retval

#include <opencv2/imgproc.hpp>

cv::GeneralizedHoughGuil クラスへのスマートポインタを生成し、初期化する。

◆ findContours() [1/2]

void cv::findContours ( InputArray image,
OutputArrayOfArrays contours,
int mode,
int method,
Point offset = Point() )
Python:
cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy

#include <opencv2/imgproc.hpp>

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ findContours() [2/2]

void cv::findContours ( InputArray image,
OutputArrayOfArrays contours,
OutputArray hierarchy,
int mode,
int method,
Point offset = Point() )
Python:
cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy

#include <opencv2/imgproc.hpp>

2値画像内の輪郭を検出する。

この関数は、アルゴリズム [264] を用いて2値画像から輪郭を取得する。輪郭は形状解析や物体検出・認識に有用なツールである。OpenCVのサンプルディレクトリにある squares.cpp を参照のこと。

覚え書き
OpenCV 3.2 以降、入力画像はこの関数によって変更されない。
引数
image入力元の8ビットシングルチャンネル画像。非ゼロのピクセルは 1 として扱われる。ゼロのピクセルは 0 のままなので、画像は2値として扱われる。グレースケールやカラー画像から2値画像を作成するには、compareinRangethresholdadaptiveThresholdCanny などを使用できる。mode が 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] には、それぞれ同一階層の次の輪郭・前の輪郭、最初の子輪郭、親輪郭の contours における0始まりのインデックスが設定される。輪郭 i に次・前・親・入れ子の輪郭が存在しない場合、hierarchy[i] の対応する要素は負になる。
覚え書き
Python では、hierarchy はトップレベルの配列の中にネストされている。i 番目の輪郭の階層要素にアクセスするには hierarchy[0][i] を使用する。
引数
mode輪郭の検索モード。RetrievalModes を参照
method輪郭の近似手法。ContourApproximationModes を参照
offset各輪郭点をシフトする省略可能なオフセット。輪郭を画像のROIから抽出し、画像全体の文脈で解析する場合に有用である。

◆ findContoursLinkRuns() [1/2]

void cv::findContoursLinkRuns ( InputArray image,
OutputArrayOfArrays contours )
Python:
cv.findContoursLinkRuns(image[, contours[, hierarchy]]) -> contours, hierarchy
cv.findContoursLinkRuns(image[, contours]) -> contours

#include <opencv2/imgproc.hpp>

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ findContoursLinkRuns() [2/2]

void cv::findContoursLinkRuns ( InputArray image,
OutputArrayOfArrays contours,
OutputArray hierarchy )
Python:
cv.findContoursLinkRuns(image[, contours[, hierarchy]]) -> contours, hierarchy
cv.findContoursLinkRuns(image[, contours]) -> contours

#include <opencv2/imgproc.hpp>

link runs アルゴリズムを用いて輪郭を検出する。

この関数は cv::findContours とは異なるアルゴリズムを実装している:

  • 内部で一時画像を確保しないため、メモリ消費量が削減される
  • CV_8UC1 画像のみをサポートする
  • 2 レベルの階層 (RETR_CCOMP モード) のみを出力する
  • CHAIN_APPROX_SIMPLE 以外の近似変更をサポートしない。その他のすべての点で、この関数は cv::findContours と互換性がある。

◆ fitEllipse()

RotatedRect cv::fitEllipse ( InputArray points)
Python:
cv.fitEllipse(points) -> retval

#include <opencv2/imgproc.hpp>

2D 点の集合の周りに楕円をフィッティングする。

この関数は、2D 点の集合に最も良く (最小二乗の意味で) フィットする楕円を計算する。楕円が内接する回転矩形を返す。[96] で最初に説明されたアルゴリズムが使用される。データ点が、それを含む Mat 要素の境界付近にある場合、返される楕円/rotatedRect のデータに負のインデックスが含まれる可能性があることに留意すべきである。

引数
pointsstd::vector<> または Mat に格納された入力2次元点集合
覚え書き
入力点の型は Point2i または Point2f であり、少なくとも 5 点が必要である。
getClosestEllipsePoints 関数を用いて楕円フィッティングの誤差を計算できる。

◆ fitEllipseAMS()

RotatedRect cv::fitEllipseAMS ( InputArray points)
Python:
cv.fitEllipseAMS(points) -> retval

#include <opencv2/imgproc.hpp>

2D 点の集合の周りに楕円をフィッティングする。

この関数は、2D 点の集合にフィットする楕円を計算する。楕円が内接する回転矩形を返す。[271] で提案された Approximate Mean Square (AMS) が使用される。

楕円の場合、この基底集合は \( \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 \) の x および y に関する偏導関数である。行列は、集合内の各点に対して以下を適用して 1 行ずつ形成される:

\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*}

引数
pointsstd::vector<> または Mat に格納された入力2次元点集合
覚え書き
入力点の型は Point2i または Point2f であり、少なくとも 5 点が必要である。
getClosestEllipsePoints 関数を用いて楕円フィッティングの誤差を計算できる。

◆ fitEllipseDirect()

RotatedRect cv::fitEllipseDirect ( InputArray points)
Python:
cv.fitEllipseDirect(points) -> retval

#include <opencv2/imgproc.hpp>

2D 点の集合の周りに楕円をフィッティングする。

この関数は、2D 点の集合にフィットする楕円を計算する。楕円が内接する回転矩形を返す。[217] による Direct least square (Direct) 法が使用される。

楕円の場合、この基底集合は \( \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 \) である。これは、基底集合が楕円関数だけでなく、直線、二次関数、放物線関数、双曲線関数も可能なフィットとして含むためである。Direct 法は、\( 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*}

このシステムは正の固有値 \( \lambda\) を 1 つだけ生成し、それが固有ベクトル \(\mathbf{u}\) とともに解として選ばれる。これらを用いて係数を求める

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

スケーリング係数は \(A^T C A =1\) を保証する。

引数
pointsstd::vector<> または Mat に格納された入力2次元点集合
覚え書き
入力点の型は Point2i または Point2f であり、少なくとも 5 点が必要である。
getClosestEllipsePoints 関数を用いて楕円フィッティングの誤差を計算できる。

◆ fitLine()

void cv::fitLine ( InputArray points,
OutputArray line,
int distType,
double param,
double reps,
double aeps )
Python:
cv.fitLine(points, distType, param, reps, aeps[, line]) -> line

#include <opencv2/imgproc.hpp>

2D または 3D の点集合に直線をフィッティングする。

関数 fitLine は、\(\sum_i \rho(r_i)\) を最小化することで 2D または 3D の点集合に直線をフィッティングする。ここで \(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 推定量 ( https://en.wikipedia.org/wiki/M-estimator ) の手法に基づいている。各反復の後、重み \(w_i\) は \(\rho(r_i)\) に反比例するように調整される。

引数
pointsstd::vector<> または Mat に格納された2次元または3次元点の入力ベクトル。
line出力される直線の引数。2次元フィッティングの場合、4要素のベクトル(Vec4f など)であり、(vx, vy, x0, y0) となる。ここで (vx, vy) は直線に平行な正規化ベクトル、(x0, y0) は直線上の点である。3次元フィッティングの場合、6要素のベクトル(Vec6f など)であり、(vx, vy, vz, x0, y0, z0) となる。ここで (vx, vy, vz) は直線に平行な正規化ベクトル、(x0, y0, z0) は直線上の点である。
distTypeM推定量で使用する距離。DistanceTypes を参照
param一部の距離種別における数値パラメータ ( C )。0の場合、最適な値が選択される。
reps半径(座標原点と直線との距離)に対する十分な精度。
aeps角度に対する十分な精度。reps と aeps には 0.01 が適切なデフォルト値である。

◆ getClosestEllipsePoints()

void cv::getClosestEllipsePoints ( const RotatedRect & ellipse_params,
InputArray points,
OutputArray closest_pts )
Python:
cv.getClosestEllipsePoints(ellipse_params, points[, closest_pts]) -> closest_pts

#include <opencv2/imgproc.hpp>

各 2D 点について、指定された楕円上に位置する最近傍の 2D 点を計算する。

この関数は、2D 点のベクトルに対して、指定された楕円上の最近傍の 2D 位置を計算するもので、[53] のコードに基づいている。この関数は、例えば楕円フィッティングの誤差を計算するために使用できる。

引数
ellipse_params楕円の引数
points入力2次元点
closest_pts各2次元点に対応する、与えられた楕円上にある最近接の2次元点
覚え書き
入力点の型は Point2i または Point2f である
参照
fitEllipse, fitEllipseAMS, fitEllipseDirect

◆ HuMoments() [1/2]

void cv::HuMoments ( const Moments & m,
OutputArray hu )
Python:
cv.HuMoments(m[, hu]) -> hu

#include <opencv2/imgproc.hpp>

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ HuMoments() [2/2]

void cv::HuMoments ( const Moments & moments,
double hu[7] )
Python:
cv.HuMoments(m[, hu]) -> hu

#include <opencv2/imgproc.hpp>

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

この関数は、([135] で導入された。https://en.wikipedia.org/wiki/Image_moment も参照) 以下のように定義される 7 つの Hu 不変量を計算する:

\[\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}\) を表す。

これらの値は、7 番目を除いて画像のスケール、回転、反転に対して不変であることが証明されている。7 番目の符号は反転によって変化する。この不変性は無限の画像解像度を仮定して証明されている。ラスタ画像の場合、元画像と変換後画像で計算された Hu 不変量は少し異なる。

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

◆ intersectConvexConvex()

float cv::intersectConvexConvex ( InputArray p1,
InputArray p2,
OutputArray p12,
bool handleNested = true )
Python:
cv.intersectConvexConvex(p1, p2[, p12[, handleNested]]) -> retval, p12

#include <opencv2/imgproc.hpp>

2 つの凸多角形の交差を求める。

引数
p11つ目の多角形
p22つ目の多角形
p12交差領域を表す出力多角形
handleNestedtrue の場合、一方の多角形が他方に完全に内包されているときに交差が検出される。false の場合、交差は検出されない。多角形が辺を共有している場合、または一方の多角形の頂点が他方の辺上にある場合、それらは入れ子とは見なされず、handleNested の値にかかわらず交差が検出される。
戻り値
交差する多角形の面積。アルゴリズムが収束しなかった場合 (例えば入力が非凸の場合) は負になることがある。
覚え書き
intersectConvexConvex は両方の多角形が凸であることを確認しないため、凸でない場合は無効な結果を返す。

◆ isContourConvex()

bool cv::isContourConvex ( InputArray contour)
Python:
cv.isContourConvex(contour) -> retval

#include <opencv2/imgproc.hpp>

輪郭の凸性をテストする。

この関数は、入力された輪郭が凸であるかどうかをテストする。輪郭は単純である、すなわち自己交差がないものでなければならない。そうでない場合、関数の出力は未定義である。

引数
contourstd::vector<> または Mat に格納された2次元点の入力ベクトル

◆ matchShapes()

double cv::matchShapes ( InputArray contour1,
InputArray contour2,
int method,
double parameter )
Python:
cv.matchShapes(contour1, contour2, method, parameter) -> retval

#include <opencv2/imgproc.hpp>

2 つの形状を比較する。

この関数は 2 つの形状を比較する。実装された 3 つのメソッドはすべて Hu 不変量 (HuMoments を参照) を使用する

引数
contour11つ目の輪郭またはグレースケール画像。
contour22つ目の輪郭またはグレースケール画像。
method比較手法。ShapeMatchModes を参照
parameter手法固有の引数(現在はサポートされていない)。

◆ minAreaRect()

RotatedRect cv::minAreaRect ( InputArray points)
Python:
cv.minAreaRect(points) -> retval

#include <opencv2/imgproc.hpp>

入力された 2D 点集合を囲む最小面積の回転矩形を求める。

この関数は、指定された点集合に対して最小面積のバウンディング矩形 (回転している場合がある) を計算して返す。回転角は、始点と終点を結ぶ線 (最大の \(y\) を持つコーナーが最大インデックスとなる時計回りの順序に基づく) と水平軸との間の角度を表す。この角度は常に \([-90, 0)\) の範囲に収まる。なぜなら、オブジェクトが直角以上回転すると次の辺を使って角度を測定するためである。始点と終点はオブジェクトの回転に伴って変化する。データが、それを含む Mat 要素の境界付近にある場合、返される RotatedRect に負のインデックスが含まれる可能性があることに留意すべきである。

引数
pointsstd::vector<> または Mat に格納された2次元点の入力ベクトル

◆ minEnclosingCircle()

void cv::minEnclosingCircle ( InputArray points,
Point2f & center,
float & radius )
Python:
cv.minEnclosingCircle(points) -> center, radius

#include <opencv2/imgproc.hpp>

2D 点集合を囲む最小面積の円を求める。

この関数は、反復アルゴリズムを用いて 2D 点集合の最小包含円を求める。

引数
pointsstd::vector<> または Mat に格納された2次元点の入力ベクトル
center出力される円の中心。
radius出力される円の半径。

◆ minEnclosingConvexPolygon()

double cv::minEnclosingConvexPolygon ( InputArray points,
OutputArray polygon,
int k )
Python:
cv.minEnclosingConvexPolygon(points, k[, polygon]) -> retval, polygon

#include <opencv2/imgproc.hpp>

2D 点集合を囲む最小面積の凸多角形を求め、その面積を返す。

この関数は、与えられた 2D 点集合を受け取り、k 個の頂点を持ち面積が最小となる包含多角形を求める。点集合と引数 k を入力として受け取り、最小包含多角形の面積を返す。

実装は Aggarwal、Chang、Yap による論文 [2] に基づいている。彼らは、n 個の頂点を持つ 2D 凸多角形 (k < n) を囲む k 個の頂点を持つ最小凸多角形を求めるための \(\theta(n²log(n)log(k))\) アルゴリズムを提供している。minEnclosingConvexPolygon 関数は 2D 点集合を入力として受け取るため、2D 点集合の凸包を計算する追加の前処理ステップが必要となる。convexHull 関数の計算量は \(O(n log(n))\) であり、\(\theta(n²log(n)log(k))\) より小さい。したがって、関数全体の計算量は \(O(n²log(n)log(k))\) となる。

引数
pointsstd::vector<> または Mat に格納された2次元点の入力ベクトル
polygon包含多角形の頂点を定義する2次元点の出力ベクトル
k出力多角形の頂点数

◆ minEnclosingTriangle()

double cv::minEnclosingTriangle ( InputArray points,
OutputArray triangle )
Python:
cv.minEnclosingTriangle(points[, triangle]) -> retval, triangle

#include <opencv2/imgproc.hpp>

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

この関数は、与えられた 2D 点集合を囲む最小面積の三角形を求め、その面積を返す。与えられた 2D 点集合に対する出力を下の画像に示す。2D 点は赤* で、囲む三角形は 黄色 で描かれている。

Sample output of the minimum enclosing triangle function

アルゴリズムの実装は、O'Rourke の [216] および Klee と Laskowski の [153] の論文に基づいている。O'Rourke は、n 個の頂点を持つ 2D 凸多角形の最小包含三角形を求めるための \(\theta(n)\) アルゴリズムを提供している。minEnclosingTriangle 関数は 2D 点集合を入力として受け取るため、2D 点集合の凸包を計算する追加の前処理ステップが必要となる。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()

Moments cv::moments ( InputArray array,
bool binaryImage = false )
Python:
cv.moments(array[, binaryImage]) -> retval

#include <opencv2/imgproc.hpp>

多角形またはラスタライズされた形状の 3 次までのすべてのモーメントを計算する。

この関数は、ベクトル形状またはラスタライズされた形状の 3 次までのモーメントを計算する。結果は構造体 cv::Moments に返される。

引数
arrayシングルチャンネルのラスター画像(CV_8U, CV_16U, CV_16S, CV_32F, CV_64F)、または2次元点(Point または Point2f)の配列( \(1 \times N\) もしくは \(N \times 1\) )。
binaryImagetrue の場合、すべての非ゼロの画像ピクセルが 1 として扱われる。この引数は画像に対してのみ使用される。
戻り値
モーメント。
覚え書き
Python バインディングからの輪郭モーメント計算にのみ適用される: 入力配列の numpy 型は np.int32 または np.float32 のいずれかでなければならないことに注意する。
輪郭ベースのモーメントの場合、0 次のモーメント m00 は輪郭の面積を表す。

入力された輪郭が退化している場合 (例えば、単一の点であるか、すべての点が共線である場合)、面積はゼロとなり、したがって m00 == 0 となる。

この場合、重心座標 (m10/m00, m01/m00) は未定義であり、呼び出し側が明示的に処理しなければならない。

一般的な回避策は、cv::boundingRect() を用いるか、入力点を平均することで中心を計算することである。

参照
contourArea, arcLength

◆ pointPolygonTest()

double cv::pointPolygonTest ( InputArray contour,
Point2f pt,
bool measureDist )
Python:
cv.pointPolygonTest(contour, pt, measureDist) -> retval

#include <opencv2/imgproc.hpp>

点が輪郭内にあるかどうかのテストを実行する。

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

各画像ピクセルを輪郭に対してテストした関数の出力例を以下に示す:

sample output
引数
contour入力輪郭。
pt輪郭に対して判定される点。
measureDisttrue の場合、関数は点から最も近い輪郭エッジまでの符号付き距離を推定する。そうでない場合、関数は点が輪郭の内側にあるかどうかのみを判定する。

◆ rotatedRectangleIntersection()

int cv::rotatedRectangleIntersection ( const RotatedRect & rect1,
const RotatedRect & rect2,
OutputArray intersectingRegion )
Python:
cv.rotatedRectangleIntersection(rect1, rect2[, intersectingRegion]) -> retval, intersectingRegion

#include <opencv2/imgproc.hpp>

2 つの回転矩形の間に交差があるかどうかを調べる。

交差がある場合は、交差領域の頂点も返される。

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

intersection examples
引数
rect11つ目の矩形
rect22つ目の矩形
intersectingRegion交差領域の頂点の出力配列。最大で8頂点を返す。std::vector<cv::Point2f> として、または型 CV_32FC2 の Mx1 の cv::Mat として格納される。
戻り値
RectanglesIntersectTypes のいずれか