OpenCV 4.5.3(日本語機械翻訳)
公開型 | 公開メンバ関数 | 静的公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 全メンバ一覧
cv::_InputArray クラス

This is the proxy class for passing read-only input arrays into OpenCV functions. [詳解]

#include <mat.hpp>

cv::_OutputArrayに継承されています。

公開型

enum KindFlag {
KIND_SHIFT = 16 , FIXED_TYPE = 0x8000 << KIND_SHIFT , FIXED_SIZE = 0x4000 << KIND_SHIFT , KIND_MASK = 31 << KIND_SHIFT ,
NONE = 0 << KIND_SHIFT , MAT = 1 << KIND_SHIFT , MATX = 2 << KIND_SHIFT , STD_VECTOR = 3 << KIND_SHIFT ,
STD_VECTOR_VECTOR = 4 << KIND_SHIFT , STD_VECTOR_MAT = 5 << KIND_SHIFT , EXPR = 6 << KIND_SHIFT , OPENGL_BUFFER = 7 << KIND_SHIFT ,
CUDA_HOST_MEM = 8 << KIND_SHIFT , CUDA_GPU_MAT = 9 << KIND_SHIFT , UMAT =10 << KIND_SHIFT , STD_VECTOR_UMAT =11 << KIND_SHIFT ,
STD_BOOL_VECTOR =12 << KIND_SHIFT , STD_VECTOR_CUDA_GPU_MAT = 13 << KIND_SHIFT , STD_ARRAY =14 << KIND_SHIFT , STD_ARRAY_MAT =15 << KIND_SHIFT
}

公開メンバ関数

_InputArray (int _flags, void *_obj)
_InputArray (const Mat &m)
_InputArray (const MatExpr &expr)
_InputArray (const std::vector< Mat > &vec)
template<typename _Tp >
_InputArray (const Mat_< _Tp > &m)
template<typename _Tp >
_InputArray (const std::vector< _Tp > &vec)
_InputArray (const std::vector< bool > &vec)
template<typename _Tp >
_InputArray (const std::vector< std::vector< _Tp > > &vec)
_InputArray (const std::vector< std::vector< bool > > &)=delete
template<typename _Tp >
_InputArray (const std::vector< Mat_< _Tp > > &vec)
template<typename _Tp >
_InputArray (const _Tp *vec, int n)
template<typename _Tp , int m, int n>
_InputArray (const Matx< _Tp, m, n > &matx)
_InputArray (const double &val)
_InputArray (const cuda::GpuMat &d_mat)
_InputArray (const std::vector< cuda::GpuMat > &d_mat_array)
_InputArray (const ogl::Buffer &buf)
_InputArray (const cuda::HostMem &cuda_mem)
template<typename _Tp >
_InputArray (const cudev::GpuMat_< _Tp > &m)
_InputArray (const UMat &um)
_InputArray (const std::vector< UMat > &umv)
template<typename _Tp , std::size_t _Nm>
_InputArray (const std::array< _Tp, _Nm > &arr)
template<std::size_t _Nm>
_InputArray (const std::array< Mat, _Nm > &arr)
Mat getMat (int idx=-1) const
Mat getMat_ (int idx=-1) const
UMat getUMat (int idx=-1) const
void getMatVector (std::vector< Mat > &mv) const
void getUMatVector (std::vector< UMat > &umv) const
void getGpuMatVector (std::vector< cuda::GpuMat > &gpumv) const
cuda::GpuMat getGpuMat () const
ogl::Buffer getOGlBuffer () const
int getFlags () const
void * getObj () const
Size getSz () const
_InputArray::KindFlag kind () const
int dims (int i=-1) const
int cols (int i=-1) const
int rows (int i=-1) const
Size size (int i=-1) const
int sizend (int *sz, int i=-1) const
bool sameSize (const _InputArray &arr) const
size_t total (int i=-1) const
int type (int i=-1) const
int depth (int i=-1) const
int channels (int i=-1) const
bool isContinuous (int i=-1) const
bool isSubmatrix (int i=-1) const
bool empty () const
void copyTo (const _OutputArray &arr) const
void copyTo (const _OutputArray &arr, const _InputArray &mask) const
size_t offset (int i=-1) const
size_t step (int i=-1) const
bool isMat () const
bool isUMat () const
bool isMatVector () const
bool isUMatVector () const
bool isMatx () const
bool isVector () const
bool isGpuMat () const
bool isGpuMatVector () const

静的公開メンバ関数

template<typename _Tp >
static _InputArray rawIn (const std::vector< _Tp > &vec)
template<typename _Tp , std::size_t _Nm>
static _InputArray rawIn (const std::array< _Tp, _Nm > &arr)

限定公開メンバ関数

void init (int _flags, const void *_obj)
void init (int _flags, const void *_obj, Size _sz)

限定公開変数類

int flags
void * obj
Size sz

詳解

読み取り専用の入力配列をOpenCVの関数に渡すための,プロキシクラスです.

次のように定義されています.

typedef const _InputArray& InputArray;

ここで_InputArrayは,次のように構成されるクラスです. Mat , Mat_<T>, Matx<T, m, n>,std::vector<T>,std::vector<std::vector<T> >,std::vector<Mat>,std::vector<Mat_<T> >, UMat ,std::vector<UMat>またはdouble. また,行列式から作成することもできます.

これは,ほとんどが実装レベルのクラスであり,そのインタフェースは将来のバージョンで変更される可能性があるので,ここでは詳細を説明しません.しかし,いくつかの重要な点については覚えておく必要があります.

ここでは、InputArray を受け取る関数をどのように使用するかを説明します。

std::vector<Point2f> vec;
// points or a circle
for( int i = 0; i < 30; i++ )
vec.push_back(Point2f((float)(100 + 30*cos(i*CV_PI*2/5)),
(float)(100 - 30*sin(i*CV_PI*2/5))));
cv::transform(vec, vec, cv::Matx23f(0.707, -0.707, 10, 0.707, 0.707, 20));
CV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m)
Performs the matrix transformation of every array element.
Quat< T > cos(const Quat< T > &q)
Quat< T > sin(const Quat< T > &q)

すなわち、点を含む STL ベクトルを形成し、インラインで次のように作成された 2x3 行列を用いて、ベクトルにインプレースでアフィン変換を施す。 Matx<float, 2, 3>インスタンスを作成します。

このような関数がどのように実装されるかを以下に示します(簡単にするために、内部のアサーション・ステートメントに従って、非常に特殊なケースを実装しています)。

void myAffineTransform(InputArray _src, OutputArray _dst, InputArray _m)
{
// get Mat headers for input arrays. This is O(1) operation,
// unless _src and/or _m are matrix expressions.
Mat src = _src.getMat(), m = _m.getMat();
CV_Assert( src.type() == CV_32FC2 && m.type() == CV_32F && m.size() == Size(3, 2) );
// [re]create the output array so that it has the proper size and type.
// In case of Mat it calls Mat::create, in case of STL vector it calls vector::resize.
_dst.create(src.size(), src.type());
Mat dst = _dst.getMat();
for( int i = 0; i < src.rows; i++ )
for( int j = 0; j < src.cols; j++ )
{
Point2f pt = src.at<Point2f>(i, j);
dst.at<Point2f>(i, j) = Point2f(m.at<float>(0, 0)*pt.x +
m.at<float>(0, 1)*pt.y +
m.at<float>(0, 2),
m.at<float>(1, 0)*pt.x +
m.at<float>(1, 1)*pt.y +
m.at<float>(1, 2));
}
}
#define CV_Assert(expr)
Checks a condition at runtime and throws exception if it fails
Definition: base.hpp:342

関連するタイプとしてInputArrayOfArraysがあり、現在はInputArrayの同義語として定義されています。

typedef InputArray InputArrayOfArrays;

これは、ベクターのベクターまたは行列のベクターである関数の引数を表します。Python/Javaなどのラッパーを適切に生成するためには、別の同義語が必要です。関数の実装レベルでは、これらの使用方法は似ていますが、_InputArray::getMat(idx)は外側のベクトルの idx 番目のコンポーネントのヘッダを取得するために使用し、_InputArray::size().area() は外側のベクトルのコンポーネント(ベクトル/行列)の数を求めるために使用します。

一般的に、型のサポートは次のものに限られます。cv::Mat型に限定されています。それ以外の型は禁止されています。しかし、場合によっては、一般的でないカスタムの型の受け渡しをサポートする必要があります。Matの配列など、一般的ではないカスタム型の受け渡しをサポートする必要がある場合もあります。cv::KeyPoint,cv::DMatchなどです。このデータは,画像データとして解釈されることは意図しておらず,通常のcv::Mat. このようなカスタムタイプを渡すにはrawIn()/rawOut()/rawInOut()ラッパーを利用します.カスタムタイプは,Mat と互換性のある値としてラップされますCV_8UC<N>値( N = sizeof(T), N <= CV_CN_MAX )として扱われます.

列挙型メンバ詳解

KindFlag

列挙値
EXPR

を削除しました。https://github.com/opencv/opencv/pull/17046

STD_ARRAY

を削除しました。https://github.com/opencv/opencv/issues/18897


このクラス詳解は次のファイルから抽出されました: