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

詳細説明

クラス

struct  cv::CirclesGridFinderParameters
 
class  cv::QRCodeDetector
 QR コード検出器。 続き...
 
class  cv::QRCodeDetectorAruco
 Aruco マーカー検出コードに基づく QR コード検出器。 続き...
 
class  cv::QRCodeEncoder
 QR コードエンコーダ。 続き...
 

列挙型

enum  {
  cv::CALIB_CB_ADAPTIVE_THRESH = 1 ,
  cv::CALIB_CB_NORMALIZE_IMAGE = 2 ,
  cv::CALIB_CB_FILTER_QUADS = 4 ,
  cv::CALIB_CB_FAST_CHECK = 8 ,
  cv::CALIB_CB_EXHAUSTIVE = 16 ,
  cv::CALIB_CB_ACCURACY = 32 ,
  cv::CALIB_CB_LARGER = 64 ,
  cv::CALIB_CB_MARKER = 128 ,
  cv::CALIB_CB_PLAIN = 256
}
 
enum  {
  cv::CALIB_CB_SYMMETRIC_GRID = 1 ,
  cv::CALIB_CB_ASYMMETRIC_GRID = 2 ,
  cv::CALIB_CB_CLUSTERING = 4
}
 

関数

bool cv::checkChessboard (InputArray img, Size size)
 画像が指定したサイズのチェスボードを含むかどうかを調べる。
 
void cv::drawChessboardCorners (InputOutputArray image, Size patternSize, InputArray corners, bool patternWasFound)
 検出されたチェスボードのコーナーを描画する。
 
Scalar cv::estimateChessboardSharpness (InputArray image, Size patternSize, InputArray corners, float rise_distance=0.8F, bool vertical=false, OutputArray sharpness=noArray())
 検出されたチェスボードの鮮鋭度を推定する。
 
bool cv::find4QuadCornerSubpix (InputArray img, InputOutputArray corners, Size region_size)
 チェスボードコーナーのサブピクセル精度の位置を求める
 
bool cv::findChessboardCorners (InputArray image, Size patternSize, OutputArray corners, int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE)
 チェスボードの内部コーナーの位置を求める。
 
bool cv::findChessboardCornersSB (InputArray image, Size patternSize, OutputArray corners, int flags, OutputArray meta)
 セクタベースのアプローチを用いてチェスボードの内部コーナーの位置を求める。
 
bool cv::findChessboardCornersSB (InputArray image, Size patternSize, OutputArray corners, int flags=0)
 
bool cv::findCirclesGrid (InputArray image, Size patternSize, OutputArray centers, int flags, const Ptr< FeatureDetector > &blobDetector, const CirclesGridFinderParameters &parameters)
 円のグリッド中の中心を求める。
 
bool cv::findCirclesGrid (InputArray image, Size patternSize, OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID, const Ptr< FeatureDetector > &blobDetector=cv::SimpleBlobDetector::create())
 

列挙型詳解

◆ anonymous enum

anonymous enum

#include <opencv2/objdetect.hpp>

列挙値
CALIB_CB_ADAPTIVE_THRESH 
Python: cv.CALIB_CB_ADAPTIVE_THRESH
CALIB_CB_NORMALIZE_IMAGE 
Python: cv.CALIB_CB_NORMALIZE_IMAGE
CALIB_CB_FILTER_QUADS 
Python: cv.CALIB_CB_FILTER_QUADS
CALIB_CB_FAST_CHECK 
Python: cv.CALIB_CB_FAST_CHECK
CALIB_CB_EXHAUSTIVE 
Python: cv.CALIB_CB_EXHAUSTIVE
CALIB_CB_ACCURACY 
Python: cv.CALIB_CB_ACCURACY
CALIB_CB_LARGER 
Python: cv.CALIB_CB_LARGER
CALIB_CB_MARKER 
Python: cv.CALIB_CB_MARKER
CALIB_CB_PLAIN 
Python: cv.CALIB_CB_PLAIN

◆ anonymous enum

anonymous enum

#include <opencv2/objdetect.hpp>

列挙値
CALIB_CB_SYMMETRIC_GRID 
Python: cv.CALIB_CB_SYMMETRIC_GRID
CALIB_CB_ASYMMETRIC_GRID 
Python: cv.CALIB_CB_ASYMMETRIC_GRID
CALIB_CB_CLUSTERING 
Python: cv.CALIB_CB_CLUSTERING

関数詳解

◆ checkChessboard()

bool cv::checkChessboard ( InputArray img,
Size size )
Python:
cv.checkChessboard(img, size) -> retval

#include <opencv2/objdetect.hpp>

画像に特定のサイズのチェスボードが含まれているかどうかを確認する。

引数
img元のチェスボードビュー。
sizeチェスボードのサイズ。
戻り値
チェスボードが見つかったかどうか。

◆ drawChessboardCorners()

void cv::drawChessboardCorners ( InputOutputArray image,
Size patternSize,
InputArray corners,
bool patternWasFound )
Python:
cv.drawChessboardCorners(image, patternSize, corners, patternWasFound) -> image

#include <opencv2/objdetect.hpp>

検出したチェスボードのコーナーを描画する。

引数
image出力画像。8ビットのカラー画像でなければならない。
patternSizeチェスボードの行・列ごとの内側コーナーの数(patternSize = cv::Size(points_per_row,points_per_column))。
corners検出されたコーナーの配列。findChessboardCorners の出力。
patternWasFoundボード全体が検出されたかどうかを示すパラメータ。findChessboardCorners の戻り値をここに渡すこと。

この関数は、ボードが見つからなかった場合は検出された個々のチェスボードのコーナーを赤い円として描画し、ボードが見つかった場合は線でつながれた色付きのコーナーとして描画する。

◆ estimateChessboardSharpness()

Scalar cv::estimateChessboardSharpness ( InputArray image,
Size patternSize,
InputArray corners,
float rise_distance = 0.8F,
bool vertical = false,
OutputArray sharpness = noArray() )
Python:
cv.estimateChessboardSharpness(image, patternSize, corners[, rise_distance[, vertical[, sharpness]]]) -> retval, sharpness

#include <opencv2/objdetect.hpp>

検出したチェスボードの鮮明度を推定する。

画像の鮮明度は、明るさと同様に、正確なカメラキャリブレーションにとって重要な引数である。問題のあるキャリブレーション画像を除外するためにこれらの引数にアクセスできるように、このメソッドは黒から白のチェスボードセル中心へとたどることでエッジプロファイルを計算する。これに基づき、黒から白へ遷移するのに必要なピクセル数を計算する。この遷移領域の幅は、チェスボードがどれだけ鮮明に撮像されているかを示す良い指標であり、約3.0ピクセル以下であるべきである。

引数
imageチェスボードのコーナー検出に使用するグレースケール画像
patternSize検出されたチェスボードパターンのサイズ
cornersfindChessboardCornersSB によって検出されたコーナー
rise_distance立ち上がり距離。0.8 は最終的な信号強度の 10% 〜 90% を意味する
verticalデフォルトでは水平線に対するエッジ応答が計算される
sharpness計算されたエッジ応答の鮮鋭度(sharpness)値を格納する出力配列(説明を参照、省略可能)

オプションの鮮明度配列は CV_32FC1 型で、計算された各プロファイルについて、次の5つのエントリを持つ行を1つ持つ:0 = 画像中の対象エッジの x 座標、1 = 画像中の対象エッジの y 座標、2 = 遷移領域の幅(鮮明度)、3 = 黒セルの信号強度(最小明度)、4 = 白セルの信号強度(最大明度)。

戻り値
Scalar(average sharpness, average min brightness, average max brightness,0)

◆ find4QuadCornerSubpix()

bool cv::find4QuadCornerSubpix ( InputArray img,
InputOutputArray corners,
Size region_size )
Python:
cv.find4QuadCornerSubpix(img, corners, region_size) -> retval, corners

#include <opencv2/objdetect.hpp>

チェスボードのコーナーのサブピクセル精度の位置を求める

◆ findChessboardCorners()

bool cv::findChessboardCorners ( InputArray image,
Size patternSize,
OutputArray corners,
int flags = CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE )
Python:
cv.findChessboardCorners(image, patternSize[, corners[, flags]]) -> retval, corners

#include <opencv2/objdetect.hpp>

チェスボードの内側のコーナーの位置を求める。

引数
image入力のチェスボード画像。8 ビットのグレースケールまたはカラー画像でなければならない。
patternSizeチェスボードの行・列ごとの内側のコーナー数 ( patternSize = cv::Size(points_per_row,points_per_column) = cv::Size(columns,rows) )。
corners検出されたコーナーの出力配列。
flagsゼロまたは以下の値の組み合わせを指定できるさまざまな操作フラグ:
  • CALIB_CB_ADAPTIVE_THRESH 固定のしきい値レベル(画像の平均輝度から計算される)ではなく、適応的しきい値処理を用いて画像を白黒に変換する。
  • CALIB_CB_NORMALIZE_IMAGE 固定または適応的なしきい値処理を適用する前に、equalizeHistで画像のガンマを正規化する。
  • CALIB_CB_FILTER_QUADS 追加の基準(輪郭の面積、周囲長、正方形らしい形状など)を用いて、輪郭抽出段階で得られた誤った四角形を除外する。
  • CALIB_CB_FAST_CHECK 画像に対してチェスボードコーナーを探す高速チェックを実行し、見つからない場合は呼び出しを途中で打ち切る。これにより、チェスボードが観測されない退化した状況での呼び出しを大幅に高速化できる。
  • CALIB_CB_PLAIN 他のすべてのフラグは無視される。入力画像はそのまま使用される。チェッカーボードを見つけやすくするための画像処理は一切行われない。これは関数の実行を高速化する効果があるが、画像が事前に適切な方法で2値化されていない場合、チェッカーボードを認識できない可能性がある。
戻り値
すべてのコーナーが見つかり、一定の順序(行ごと、各行で左から右へ)で配置された場合はtrueを返す。それ以外、つまり関数がすべてのコーナーを見つけられなかったり並べ替えに失敗した場合はfalseを返す。

この関数は、入力画像がチェスボードパターンのビューであるかどうかを判定し、内側のチェスボードコーナーの位置を特定しようとする。たとえば、通常のチェスボードは8×8の正方形と7×7の内側のコーナー、すなわち黒い正方形どうしが接する点を持つ。検出される座標は近似的であり、その位置をより正確に求めるために、この関数は cornerSubPix を呼び出す。返される座標が十分に正確でない場合は、異なる引数を指定して cornerSubPix 関数を使用してもよい。

チェスボードのコーナーを検出して描画する使用例: :

Size patternsize(8,6); //interior number of corners
Mat gray = ....; //source image
vector<Point2f> corners; //this will be filled by the detected corners
//CALIB_CB_FAST_CHECK saves a lot of time on images
//that do not contain any chessboard corners
bool patternfound = findChessboardCorners(gray, patternsize, corners,
if(patternfound)
cornerSubPix(gray, corners, Size(11, 11), Size(-1, -1),
TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
drawChessboardCorners(img, patternsize, Mat(corners), patternfound);
Comma-separated Matrix Initializer.
Definition mat.hpp:964
Template class for specifying the size of an image or rectangle.
Definition types.hpp:338
The class defining termination criteria for iterative algorithms.
Definition types.hpp:896
Size2i Size
Definition types.hpp:373
void cornerSubPix(InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, TermCriteria criteria)
Refines the corner locations.
void drawChessboardCorners(InputOutputArray image, Size patternSize, InputArray corners, bool patternWasFound)
Renders the detected chessboard corners.
bool findChessboardCorners(InputArray image, Size patternSize, OutputArray corners, int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE)
Finds the positions of internal corners of the chessboard.
@ CALIB_CB_FAST_CHECK
Definition objdetect.hpp:323
@ CALIB_CB_ADAPTIVE_THRESH
Definition objdetect.hpp:320
@ CALIB_CB_NORMALIZE_IMAGE
Definition objdetect.hpp:321
覚え書き
様々な環境で検出をよりロバストにするために、関数はボードの周囲に余白(正方形の太さの境界のような、広いほどよい)を必要とする。さもなければ、境界がなく背景が暗い場合、外側の黒いマスを適切にセグメント化できず、マスのグループ化と並べ替えのアルゴリズムが失敗する。

目的のチェッカーボードパターンを作成するには、generate_pattern.py Pythonスクリプト(キャリブレーションパターンの作成)を使用する。

◆ findChessboardCornersSB() [1/2]

bool cv::findChessboardCornersSB ( InputArray image,
Size patternSize,
OutputArray corners,
int flags,
OutputArray meta )
Python:
cv.findChessboardCornersSB(image, patternSize[, corners[, flags]]) -> retval, corners
cv.findChessboardCornersSBWithMeta(image, patternSize, flags[, corners[, meta]]) -> retval, corners, meta

#include <opencv2/objdetect.hpp>

セクタベースのアプローチを用いてチェスボードの内側のコーナーの位置を求める。

引数
image入力のチェスボード画像。8 ビットのグレースケールまたはカラー画像でなければならない。
patternSizeチェスボードの行・列ごとの内側のコーナー数 ( patternSize = cv::Size(points_per_row,points_per_column) = cv::Size(columns,rows) )。
corners検出されたコーナーの出力配列。
flagsゼロまたは以下の値の組み合わせを指定できるさまざまな操作フラグ:
  • CALIB_CB_NORMALIZE_IMAGE 検出前にequalizeHistで画像のガンマを正規化する。
  • CALIB_CB_EXHAUSTIVE 検出率を向上させるために全探索を実行する。
  • CALIB_CB_ACCURACY エイリアシングの影響によるサブピクセル精度を向上させるために入力画像をアップサンプリングする。
  • CALIB_CB_LARGER 検出されるパターンがpatternSizeより大きいことを許容する(説明を参照)。
  • CALIB_CB_MARKER 検出されるパターンはマーカーを持たなければならない(説明を参照)。正確なカメラキャリブレーションが必要な場合に使用すべきである。
meta検出されたコーナーの省略可能な出力配列(CV_8UC1 で size = cv::Size(columns,rows))。各エントリはパターンの 1 つのコーナーを表し、以下のいずれかの値を取り得る:
  • 0 = メタデータが付与されていない
  • 1 = 黒セルの左上コーナー
  • 2 = 白セルの左上コーナー
  • 3 = 白いマーカードットを持つ黒セルの左上コーナー
  • 4 = 黒いマーカードットを持つ白セルの左上コーナー(マーカーがある場合はパターンの原点、それ以外の場合は最初のコーナー)

この関数は findChessboardCorners に類似しているが、ボックスフィルタで近似した局所的なラドン変換を用いており、あらゆる種類のノイズに対してよりロバストで、大きな画像ではより高速であり、内側のチェスボードコーナーのサブピクセル位置を直接返すことができる。この手法は論文 [78] 「Accurate Detection and Localization of Checkerboard Corners for Calibration」に基づいており、返されるサブピクセル位置がcornerSubPixで返されるものよりも正確であり、要求の厳しいアプリケーション向けの高精度なカメラキャリブレーションを可能にすることを示している。

フラグ CALIB_CB_LARGER または CALIB_CB_MARKER が指定された場合、結果は省略可能なメタ配列から復元できる。どちらのフラグも、カメラの視野を超えるキャリブレーションパターンを使用する際に役立つ。これらの大きすぎるパターンは、画像の境界にできるだけ近いコーナーを利用できるため、より正確なキャリブレーションを可能にする。すべての画像で一貫した座標系を得るために、省略可能なマーカー(下図を参照)を使用して、ボードの原点を黒い円のある位置に移動できる。

覚え書き
この関数は、様々な環境での検出を向上させるために、ボード全体の周囲にチェッカーボードのマス目の1つとほぼ同じ幅の白い境界を必要とする。さらに、局所的なラドン変換のため、ボードの外側に位置するマス目のコーナーには丸いコーナーを使用すると有利である。次の図は、検出に最適化されたチェッカーボードの例を示している。ただし、他の任意のチェッカーボードも同様に使用できる。

対応するチェッカーボードパターンを作成するには、generate_pattern.py Pythonスクリプト(キャリブレーションパターンの作成)を使用する:

◆ findChessboardCornersSB() [2/2]

bool cv::findChessboardCornersSB ( InputArray image,
Size patternSize,
OutputArray corners,
int flags = 0 )
inline
Python:
cv.findChessboardCornersSB(image, patternSize[, corners[, flags]]) -> retval, corners
cv.findChessboardCornersSBWithMeta(image, patternSize, flags[, corners[, meta]]) -> retval, corners, meta

#include <opencv2/objdetect.hpp>

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

この関数の呼び出しグラフ:

◆ findCirclesGrid() [1/2]

bool cv::findCirclesGrid ( InputArray image,
Size patternSize,
OutputArray centers,
int flags,
const Ptr< FeatureDetector > & blobDetector,
const CirclesGridFinderParameters & parameters )
Python:
cv.findCirclesGrid(image, patternSize, flags, blobDetector, parameters[, centers]) -> retval, centers
cv.findCirclesGrid(image, patternSize[, centers[, flags[, blobDetector]]]) -> retval, centers

#include <opencv2/objdetect.hpp>

円のグリッドの中心を求める。

引数
image入力の円グリッド画像。8 ビットのグレースケールまたはカラー画像でなければならない。
patternSize行・列ごとの円の数 ( patternSize = Size(points_per_row, points_per_column) )。
centers検出された中心点の出力配列。
flags以下のいずれかの値を指定できるさまざまな操作フラグ:
  • CALIB_CB_SYMMETRIC_GRID 対称な円パターンを使用する。
  • CALIB_CB_ASYMMETRIC_GRID 非対称な円パターンを使用する。
  • CALIB_CB_CLUSTERING グリッド検出に特殊なアルゴリズムを使用する。透視歪みに対してはより頑健だが、背景の乱雑さに対してははるかに敏感である。
blobDetector明るい背景上の暗い円のようなブロブを見つける特徴検出器。blobDetector が NULL の場合、image は候補点の Point2f 配列を表す。
parametersグリッドパターン内の円を見つけるための構造体。

すべての中心が見つかり、一定の順序(行ごと、各行で左から右へ)で配置された場合はTrueを返す。それ以外、つまり関数がすべてのコーナーを見つけられなかったり並べ替えに失敗した場合はfalseを返す。

この関数は、入力画像に円のグリッドが含まれているかどうかを判定しようとする。含まれている場合、関数は円の中心の位置を特定する。

円の中心を検出して描画する使用例: :

Size patternsize(7,7); //number of centers
Mat gray = ...; //source image
vector<Point2f> centers; //this will be filled by the detected centers
bool patternfound = findCirclesGrid(gray, patternsize, centers);
drawChessboardCorners(img, patternsize, Mat(centers), patternfound);
bool findCirclesGrid(InputArray image, Size patternSize, OutputArray centers, int flags, const Ptr< FeatureDetector > &blobDetector, const CirclesGridFinderParameters &parameters)
Finds centers in the grid of circles.
覚え書き
様々な環境で検出をよりロバストにするために、関数はボードの周囲に余白(正方形の太さの境界のような、広いほどよい)を必要とする。

◆ findCirclesGrid() [2/2]

bool cv::findCirclesGrid ( InputArray image,
Size patternSize,
OutputArray centers,
int flags = CALIB_CB_SYMMETRIC_GRID,
const Ptr< FeatureDetector > & blobDetector = cv::SimpleBlobDetector::create() )
Python:
cv.findCirclesGrid(image, patternSize, flags, blobDetector, parameters[, centers]) -> retval, centers
cv.findCirclesGrid(image, patternSize[, centers[, flags[, blobDetector]]]) -> retval, centers

#include <opencv2/objdetect.hpp>

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