目录
[1. 类 _InputArray说明](#1. 类 _InputArray说明)
[2. 示例](#2. 示例)
1. 类 _InputArray说明
该类是传递只读输入数组进 OpenCV 中函数的代理类。与其相关的类的继承关系为:

其定义了几个同义词:
typedef const _InputArray& InputArray;
typedef InputArray InputArrayOfArrays;
typedef const _OutputArray& OutputArray;
typedef OutputArray OutputArrayOfArrays;
typedef const _InputOutputArray& InputOutputArray;
typedef InputOutputArray InputOutputArrayOfArrays;
const 表示不能改变引用所指向的对象的值(对象属性等)。
与 InputArray 一样,OpenCV 用户无需关心 OutputArray ,可以由 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 相同的限制:不要显式创建 OutputArray 实例。
如果你想使函数具有多态性(即接受不同的数组作为输出参数),也并不难。请参考上面的示例。注意,必须在调用 _OutputArray::getMat() 之前调用 _OutputArray::create()。这样可以确保输出数组被正确分配。
可选输出参数。如果你不需要计算并返回某些输出数组,请传递 cv::noArray(),就像处理可选输入数组一样。在实现层面,可以使用 _OutputArray::needed() 来检查是否需要计算某些输出数组。
OutputArray 有几个同义词,它们用于辅助自动 Python/Java/... 封装器生成器:
2. 示例
( 1 )
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));
( 2 )
#include <opencv2/opencv.hpp>
#include <vector>
void example() {
cv::Mat img = cv::imread("image.jpg");
// 1. Passing a cv::Mat
cv::imshow("Window", img);
// 2. Passing a std::vector (e.g., points for transform)
std::vector<cv::Point2f> points = { {0,0}, {10,10} };
cv::Mat output;
// Some functions like perspectiveTransform accept std::vector as InputArray
// cv::perspectiveTransform(points, output, m_transf);
// 3. Passing a Scalar (treated as a 1x1 array)
cv::Mat mask;
cv::mean(img, mask);
}
注意: imshow 定义为:
void cv::imshow( const String& winname, InputArray _img )
{
}
调用
cv::Mat img = cv::imread("image.jpg");
// 1. Passing a cv::Mat
cv::imshow("Window", img); // 复制初始化,调用构造函数
使用的是复制初始化,等价于:
InputArray obj = img;
cv::imshow("Window", obj); // 复制初始化,调用复制构造函数
// 编译器根据传入的参数,去推导构造函数,并创建对象。