OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
无匹配项
cv::_InputArray 类参考

这是用于将只读输入数组传递到 OpenCV 函数的代理类。更多…

#include <opencv2/core/mat.hpp>

cv::_InputArray 的协作图

公共类型

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

静态公共成员函数

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

保护成员函数

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;
这是一个用于将只读输入数组传递到OpenCV函数的代理类。
定义 mat.hpp:161
const _InputArray & InputArray
定义 mat.hpp:443

其中 cv::_InputArray 是一个可以由 cv::Matcv::Mat_<T>cv::Matx<T, m, n>,std::vector<T>,std::vector<std::vector<T>>,std::vector<Mat>,std::vector<Mat_<T>>,cv::UMat,std::vector<UMat> 或 double 构造的类。它也可以由矩阵表达式构造。

由于这主要是一个实现级别的类,并且它的接口在未来的版本中可能会发生变化,因此我们不会详细描述它。但是,有一些关键点需要注意

  • 当您在参考手册或OpenCV源代码中看到一个接受InputArray的函数时,这意味着您实际上可以传递MatMatxvector<T> 等。(参见上面完整的列表)。
  • 可选输入参数:如果一些输入数组可能为空,则传递 cv::noArray()(或者像您之前可能做的那样,简单地传递 cv::Mat())。
  • 该类仅设计用于传递参数。也就是说,通常您不应该声明此类型的类成员、局部变量和全局变量。
  • 如果您想设计自己的函数或类方法,使其可以操作多种类型的数组,您可以对相应的参数使用InputArray(或OutputArray)。在函数内部,您应该使用 _InputArray::getMat() 方法为数组构造矩阵头(不复制数据)。_InputArray::kind() 可用于区分 Matvector<> 等,但通常不需要。

以下是使用接受InputArray的函数的方法

std::vector<Point2f> vec;
// 点或圆
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));
void transform(InputArray src, OutputArray dst, InputArray m)
执行每个数组元素的矩阵变换。
Quat< T > cos(const Quat< T > &q)
Quat< T > sin(const Quat< T > &q)
#define CV_PI
定义 cvdef.h:380

也就是说,我们创建一个包含点的STL向量,并使用内联创建的2x3矩阵Matx<float, 2, 3>实例对向量应用就地仿射变换。

以下是此类函数的实现方法(为简便起见,我们根据内部断言语句实现了它的一个非常具体的案例)

void myAffineTransform(InputArray _src, OutputArray _dst, InputArray _m)
{
// 获取输入数组的Mat头。这是一个O(1)操作,
// 除非_src和/或_m是矩阵表达式。
Mat src = _src.getMat(), m = _m.getMat();
CV_Assert( src.type() == CV_32FC2 && m.type() == CV_32F && m.size() == Size(3, 2) );
// [重新]创建输出数组,使其具有适当的大小和类型。
// 对于Mat,它调用Mat::create,对于STL向量,它调用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));
}
}
n维密集数组类
定义 mat.hpp:829
MatSize size
定义 mat.hpp:2177
_Tp & at(int i0=0)
返回对指定数组元素的引用。
int cols
定义 mat.hpp:2155
int rows
行和列的数量,当矩阵具有超过2维时为(-1, -1)
定义 mat.hpp:2155
int type() const
返回矩阵元素的类型。
_Tp y
点的y坐标
定义 types.hpp:202
_Tp x
点的x坐标
定义 types.hpp:201
用于指定图像或矩形大小的模板类。
定义 types.hpp:335
Mat getMat(int idx=-1) const
此类型与InputArray非常相似,只是它用于输入/输出和输出函数p...
定义 mat.hpp:297
void create(Size sz, int type, int i=-1, bool allowTransposed=false, _OutputArray::DepthMask fixedDepthMask=static_cast< _OutputArray::DepthMask >(0)) const
Point_< float > Point2f
定义 types.hpp:207
#define CV_32FC2
定义 interface.h:119
#define CV_32F
定义 interface.h:78
#define CV_Assert(expr)
检查运行时的条件,如果失败则抛出异常。
定义 base.hpp:359

还有另一种相关的类型InputArrayOfArrays,它目前被定义为InputArray的同义词

InputArray InputArrayOfArrays
定义 mat.hpp:444

它表示函数参数,这些参数是向量向量或矩阵向量。需要单独的同义词才能正确生成Python/Java等包装器。在函数实现级别,它们的用法相似,但应该使用_InputArray::getMat(idx) 获取外部向量的第idx个组件的头,并使用_InputArray::size().area() 查找外部向量的组件(向量/矩阵)的数量。

一般来说,类型支持仅限于cv::Mat类型。其他类型是被禁止的。但在某些情况下,我们需要支持传递自定义的非通用Mat类型,例如cv::KeyPointcv::DMatch等数组。此数据并非旨在解释为图像数据,或像常规cv::Mat一样进行处理。要传递此类自定义类型,请使用rawIn() / rawOut() / rawInOut()包装器。自定义类型被包装为与Mat兼容的CV_8UC<N>值(N = sizeof(T),N <= CV_CN_MAX)。

示例
samples/cpp/pca.cppsamples/cpp/peopledetect.cpp

成员枚举文档

◆ KindFlag

枚举器
KIND_SHIFT 
FIXED_TYPE 
FIXED_SIZE 
KIND_MASK 
NONE 
MAT 
MATX 
STD_VECTOR 
STD_VECTOR_VECTOR 
STD_VECTOR_MAT 
EXPR 

已移除: https://github.com/opencv/opencv/pull/17046

OPENGL_BUFFER 
CUDA_HOST_MEM 
CUDA_GPU_MAT 
UMAT 
STD_VECTOR_UMAT 
STD_BOOL_VECTOR 
STD_VECTOR_CUDA_GPU_MAT 
STD_ARRAY 

已移除: https://github.com/opencv/opencv/issues/18897

STD_ARRAY_MAT 

构造函数和析构函数文档

◆ _InputArray() [1/23]

cv::_InputArray::_InputArray ( )

◆ _InputArray() [2/23]

cv::_InputArray::_InputArray ( int _flags,
void * _obj )

◆ _InputArray() [3/23]

cv::_InputArray::_InputArray ( const Mat & m)

◆ _InputArray() [4/23]

cv::_InputArray::_InputArray ( const MatExpr & expr)

◆ _InputArray() [5/23]

cv::_InputArray::_InputArray ( const std::vector< Mat > & vec)

◆ _InputArray() [6/23]

模板<typename _Tp >
cv::_InputArray::_InputArray ( const Mat_< _Tp > & m)

◆ _InputArray() [7/23]

模板<typename _Tp >
cv::_InputArray::_InputArray ( const std::vector< _Tp > & vec)

◆ _InputArray() [8/23]

cv::_InputArray::_InputArray ( const std::vector< bool > & vec)

◆ _InputArray() [9/23]

模板<typename _Tp >
cv::_InputArray::_InputArray ( const std::vector< std::vector< _Tp > > & vec)

◆ _InputArray() [10/23]

cv::_InputArray::_InputArray ( const std::vector< std::vector< bool > > & )
删除

◆ _InputArray() [11/23]

模板<typename _Tp >
cv::_InputArray::_InputArray ( const std::vector< Mat_< _Tp > > & vec)

◆ _InputArray() [12/23]

模板<typename _Tp >
cv::_InputArray::_InputArray ( const _Tp * vec,
int n )

◆ _InputArray() [13/23]

模板<typename _Tp , int m, int n>
cv::_InputArray::_InputArray ( const Matx< _Tp, m, n > & matx)

◆ _InputArray() [14/23]

cv::_InputArray::_InputArray ( const double & val)

◆ _InputArray() [15/23]

cv::_InputArray::_InputArray ( const cuda::GpuMat & d_mat)

◆ _InputArray() [16/23]

cv::_InputArray::_InputArray ( const std::vector< cuda::GpuMat > & d_mat_array)

◆ _InputArray() [17/23]

cv::_InputArray::_InputArray ( const ogl::Buffer & buf)

◆ _InputArray() [18/23]

cv::_InputArray::_InputArray ( const cuda::HostMem & cuda_mem)

◆ _InputArray() [19/23]

模板<typename _Tp >
cv::_InputArray::_InputArray ( const cudev::GpuMat_< _Tp > & m)

◆ _InputArray() [20/23]

cv::_InputArray::_InputArray ( const UMat & um)

◆ _InputArray() [21/23]

cv::_InputArray::_InputArray ( const std::vector< UMat > & umv)

◆ _InputArray() [22/23]

模板<typename _Tp , std::size_t _Nm>
cv::_InputArray::_InputArray ( const std::array< _Tp, _Nm > & arr)

◆ _InputArray() [23/23]

模板<std::size_t _Nm>
cv::_InputArray::_InputArray ( const std::array< Mat, _Nm > & arr)

◆ ~_InputArray()

cv::_InputArray::~_InputArray ( )

成员函数文档

◆ channels()

int cv::_InputArray::channels ( int i = -1) const

◆ cols()

int cv::_InputArray::cols ( int i = -1) const

◆ copyTo() [1/2]

void cv::_InputArray::copyTo ( const _OutputArray & arr) const

◆ copyTo() [2/2]

void cv::_InputArray::copyTo ( const _OutputArray & arr,
const _InputArray & mask ) const

◆ depth()

int cv::_InputArray::depth ( int i = -1) const

◆ dims()

int cv::_InputArray::dims ( int i = -1) const

◆ empty()

bool cv::_InputArray::empty ( ) const

◆ getFlags()

int cv::_InputArray::getFlags ( ) const

◆ getGpuMat()

cuda::GpuMat cv::_InputArray::getGpuMat ( ) const

◆ getGpuMatVector()

void cv::_InputArray::getGpuMatVector ( std::vector< cuda::GpuMat > & gpumv) const

◆ getMat()

Mat cv::_InputArray::getMat ( int idx = -1) const

◆ getMat_()

Mat cv::_InputArray::getMat_ ( int idx = -1) const

◆ getMatVector()

void cv::_InputArray::getMatVector ( std::vector< Mat > & mv) const

◆ getObj()

void * cv::_InputArray::getObj ( ) const

◆ getOGlBuffer()

ogl::Buffer cv::_InputArray::getOGlBuffer ( ) const

◆ getSz()

Size cv::_InputArray::getSz ( ) const

◆ getUMat()

UMat cv::_InputArray::getUMat ( int idx = -1) const

◆ getUMatVector()

void cv::_InputArray::getUMatVector ( std::vector< UMat > & umv) const

◆ init() [1/2]

void cv::_InputArray::init ( int _flags,
const void * _obj )
protected

◆ init() [2/2]

void cv::_InputArray::init ( int _flags,
const void * _obj,
Size _sz )
protected

◆ isContinuous()

bool cv::_InputArray::isContinuous ( int i = -1) const

◆ isGpuMat()

bool cv::_InputArray::isGpuMat ( ) const

◆ isGpuMatVector()

bool cv::_InputArray::isGpuMatVector ( ) const

◆ isMat()

bool cv::_InputArray::isMat ( ) const

◆ isMatVector()

bool cv::_InputArray::isMatVector ( ) const

◆ isMatx()

bool cv::_InputArray::isMatx ( ) const

◆ isSubmatrix()

bool cv::_InputArray::isSubmatrix ( int i = -1) const

◆ isUMat()

bool cv::_InputArray::isUMat ( ) const

◆ isUMatVector()

bool cv::_InputArray::isUMatVector ( ) const

◆ isVector()

bool cv::_InputArray::isVector ( ) const

◆ kind()

_InputArray::KindFlag cv::_InputArray::kind ( ) const

◆ offset()

size_t cv::_InputArray::offset ( int i = -1) const

◆ rawIn() [1/2]

模板<typename _Tp , std::size_t _Nm>
static _InputArray cv::_InputArray::rawIn ( const std::array< _Tp, _Nm > & arr)
static

◆ rawIn() [2/2]

模板<typename _Tp >
static _InputArray cv::_InputArray::rawIn ( const std::vector< _Tp > & vec)
static

◆ rows()

int cv::_InputArray::rows ( int i = -1) const

◆ sameSize()

bool cv::_InputArray::sameSize ( const _InputArray & arr) const

◆ size()

Size cv::_InputArray::size ( int i = -1) const

◆ sizend()

int cv::_InputArray::sizend ( int * sz,
int i = -1 ) const

◆ step()

size_t cv::_InputArray::step ( int i = -1) const

◆ total()

size_t cv::_InputArray::total ( int i = -1) const

◆ type()

int cv::_InputArray::type ( int i = -1) const

成员数据文档

◆ flags

int cv::_InputArray::flags
protected

◆ obj

void* cv::_InputArray::obj
protected

◆ sz

Size cv::_InputArray::sz
protected

此类的文档是从以下文件生成的: