OpenCV图像处理——InputStream类

张开发
2026/4/4 8:36:16 15 分钟阅读
OpenCV图像处理——InputStream类
目录1. 类 _InputArray说明2. 示例1. 类 _InputArray说明该类是传递只读输入数组进OpenCV中函数的代理类。与其相关的类的继承关系为其定义了几个同义词typedefconst_InputArrayInputArray;typedefInputArrayInputArrayOfArrays;typedefconst_OutputArrayOutputArray;typedefOutputArrayOutputArrayOfArrays;typedefconst_InputOutputArrayInputOutputArray;typedefInputOutputArrayInputOutputArrayOfArrays;const表示不能改变引用所指向的对象的值(对象属性等)。与InputArray一样OpenCV用户无需关心OutputArray可以由MatMat_TMatxT, m, nstd::vectorTstd::vectorstd::vectorTstd::vectorMatstd::vectorMat_TUMatstd::vectorUMat或double类型构造而成。它也可以由矩阵表达式构造而成。与InputArray相同的限制不要显式创建OutputArray实例。如果你想使函数具有多态性(即接受不同的数组作为输出参数)也并不难。请参考上面的示例。注意必须在调用_OutputArray::getMat()之前调用_OutputArray::create()。这样可以确保输出数组被正确分配。可选输出参数。如果你不需要计算并返回某些输出数组请传递cv::noArray()就像处理可选输入数组一样。在实现层面可以使用_OutputArray::needed()来检查是否需要计算某些输出数组。OutputArray有几个同义词它们用于辅助自动 Python/Java/... 封装器生成器2. 示例( 1 )std::vectorPoint2f vec;// points or a circlefor(inti 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 )#includeopencv2/opencv.hpp#includevectorvoidexample() {cv::Mat img cv::imread(image.jpg);// 1. Passing a cv::Matcv::imshow(Window, img);// 2. Passing a std::vector (e.g., points for transform)std::vectorcv::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定义为voidcv::imshow(constStringwinname,InputArray_img){}调用cv::Mat img cv::imread(image.jpg);// 1. Passing a cv::Matcv::imshow(Window, img);//复制初始化调用构造函数使用的是复制初始化等价于InputArray obj img;cv::imshow(Window,obj);//复制初始化调用复制构造函数//编译器根据传入的参数去推导构造函数并创建对象。

更多文章