OpenCV图像处理——InputStream类(版本4.12.0)

目录

[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); // 复制初始化,调用复制构造函数

// 编译器根据传入的参数,去推导构造函数,并创建对象。

相关推荐
程序人生8882 小时前
从“把隐私文件上传到别人云端“到本地可控:DocConverter Web 立项初心与架构选型
前端·图像处理·人工智能·opencv·架构·ocr·文心一言
冷雨夜中漫步2 小时前
YOLO快速入门——(2)YOLO V26安装与快速入门
图像处理·算法·yolo·计算机视觉
新新学长搞科研3 小时前
【一级学会, 985高校联合主办】第五届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2026)
图像处理·机器学习·计算机视觉
福兮说16 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
新新学长搞科研21 小时前
【SPIE出版丨EI稳定检索】第三届模式识别与图像分析国际学术会议(PRIA 2026)
图像处理·机器学习·图像分析
ab1237681 天前
OpenCV 学习笔记
笔记·opencv·学习
咯哦哦哦哦1 天前
opencv复现 Halcon 双相机拼接
人工智能·数码相机·opencv
段一凡-华北理工大学1 天前
高炉炼铁机器视觉与智能识别十八讲~系列文章09:AI 算法基础:从传统图像处理到深度学习的视觉“大脑“
图像处理·人工智能·算法·机器视觉·工业智能化·高炉炼铁智能化·高炉智能识别
源码学社1 天前
图像去水印实测:OpenCV inpainting vs LaMa,传统算法和 AI 模型差距有多大
人工智能·opencv·算法·去水印·图片水印·ai去水印
Latchh1 天前
PDF打开不要密码却显示已加密,前端怎么判断
前端·图像处理·人工智能·计算机视觉·pdf