OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
cv::NAryMatIterator 类参考

n-ary 多维数组迭代器。更多...

#include <opencv2/core/mat.hpp>

cv::NAryMatIterator 的协作图

公开成员函数

 NAryMatIterator ()
 默认构造函数
 
 NAryMatIterator (const Mat **arrays, Mat *planes, int narrays=-1)
 接受任意数量 n-维矩阵的完整构造函数
 
 NAryMatIterator (const Mat **arrays, uchar **ptrs, int narrays=-1)
 接受任意数量 n-维矩阵的完整构造函数
 
void init (const Mat **arrays, Mat *planes, uchar **ptrs, int narrays=-1)
 独立的迭代器初始化方法
 
NAryMatIteratoroperator++ ()
 前进到每个被迭代矩阵的下一个平面
 
NAryMatIterator operator++ (int)
 前进到每个被迭代矩阵的下一个平面(后缀自增运算符)
 

公开属性

const Mat ** arrays
 被迭代的数组
 
int narrays
 数组的数量
 
size_t nplanes
 迭代器将遍历的超平面数量
 
Matplanes
 当前的平面
 
uchar ** ptrs
 数据指针
 
size_t size (大小)
 每个段的大小(以元素为单位)
 

保护属性

size_t idx (索引)
 
int iterdepth
 

详细说明

n-ary 多维数组迭代器。

使用此类来实现多维数组的一元、二元以及通用的 n-元逐元素操作。n-元函数的某些参数可以是连续数组,有些则不能。可以为每个数组使用传统的 MatIterator,但在每次小型操作后递增所有迭代器可能会产生很大的开销。在这种情况下,请考虑使用 NAryMatIterator 来同时迭代多个矩阵,只要它们具有相同的几何形状(维度和所有维度大小都相同)。在每次迭代时,it.planes[0], it.planes[1],... 将是对应矩阵的切片。

下面的示例说明了如何计算一个归一化和阈值的 3D 颜色直方图

void computeNormalizedColorHist(const Mat& image, Mat& hist, int N, double minProb)
{
const int histSize[] = {N, N, N};
// 确保直方图具有正确的尺寸和类型
hist.create(3, histSize, CV_32F);
// 并清空它
hist = Scalar(0);
// 下面的循环假定图像
// 是一个 8 位 3 通道图像。检查它。
CV_Assert(image.type() == CV_8UC3);
it_end = image.end<Vec3b>();
for( ; it != it_end; ++it )
{
const Vec3b& pix = *it;
hist.at<float>(pix[0]*N/256, pix[1]*N/256, pix[2]*N/256) += 1.f;
}
minProb *= image.rows*image.cols;
// 初始化迭代器(样式与 STL 不同)。
// 初始化后,迭代器将包含
// 迭代器将遍历的切片或平面数量。
// 它同时递增多个矩阵的迭代器
// 作为以 null 终止的指针列表提供
const Mat* arrays[] = {&hist, 0};
Mat planes[1];
double s = 0;
// 遍历矩阵。每次迭代
// itNAry.planes[i](类型为 Mat)将被设置为当前平面
// 传递给迭代器构造函数的第 i 个 n-维矩阵。
for(int p = 0; p < itNAry.nplanes; p++, ++itNAry)
{
threshold(itNAry.planes[0], itNAry.planes[0], minProb, 0, THRESH_TOZERO);
s += sum(itNAry.planes[0])[0];
}
s = 1./s;
for(int p = 0; p < itNAry.nplanes; p++, ++itNAry)
itNAry.planes[0] *= s;
}
矩阵只读迭代器。
定义 mat.hpp:3215
n 维密集数组类
定义于 mat.hpp:840
MatIterator_< _Tp > end()
返回矩阵迭代器并将其设置为最后一个矩阵元素之后的位置。
void create(int rows, int cols, int type)
如果需要,分配新的数组数据。
MatIterator_< _Tp > begin()
返回矩阵迭代器并将其设置为第一个矩阵元素。
_Tp & at(int i0=0)
返回对指定数组元素的引用。
int cols
定义 mat.hpp:2204
int rows
行数和列数,当矩阵超过 2 维时为 (-1, -1)
定义 mat.hpp:2204
int type() const
返回矩阵元素的类型。
const Mat ** arrays
被迭代的数组
定义 mat.hpp:3544
Mat * planes
当前的平面
定义 mat.hpp:3546
NAryMatIterator()
默认构造函数
短数值向量的模板类,是 Matx 的一个特例。
定义于 matx.hpp:369
Scalar sum(InputArray src)
计算数组元素的总和。
Scalar_< double > Scalar
定义于 types.hpp:709
#define CV_32F
定义位于 interface.h:78
#define CV_8UC3
定义于 interface.h:90
#define CV_Assert(expr)
在运行时检查条件,如果失败则抛出异常。
定义于 base.hpp:423
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
对数组的每个元素应用固定阈值操作。
@ THRESH_TOZERO
定义 imgproc.hpp:329

构造函数与析构函数说明

◆ NAryMatIterator() [1/3]

cv::NAryMatIterator::NAryMatIterator ( )

默认构造函数

◆ NAryMatIterator() [2/3]

cv::NAryMatIterator::NAryMatIterator ( const Mat ** arrays,
uchar ** ptrs,
int narrays=-1 )

接受任意数量 n-维矩阵的完整构造函数

◆ NAryMatIterator() [3/3]

cv::NAryMatIterator::NAryMatIterator ( const Mat ** arrays,
Mat * planes,
int narrays=-1 )

接受任意数量 n-维矩阵的完整构造函数

成员函数说明

◆ init()

void cv::NAryMatIterator::init ( const Mat ** arrays,
Mat * planes,
uchar ** ptrs,
int narrays=-1 )

独立的迭代器初始化方法

◆ operator++() [1/2]

NAryMatIterator & cv::NAryMatIterator::operator++ ( )

前进到每个被迭代矩阵的下一个平面

◆ operator++() [2/2]

NAryMatIterator cv::NAryMatIterator::operator++ ( int )

前进到每个被迭代矩阵的下一个平面(后缀自增运算符)

成员数据文档

◆ arrays

const Mat** cv::NAryMatIterator::arrays

被迭代的数组

◆ idx

size_t cv::NAryMatIterator::idx
保护

◆ iterdepth

int cv::NAryMatIterator::iterdepth
保护

◆ narrays

int cv::NAryMatIterator::narrays

数组的数量

◆ nplanes

size_t cv::NAryMatIterator::nplanes

迭代器将遍历的超平面数量

◆ planes

Mat* cv::NAryMatIterator::planes

当前的平面

◆ ptrs

uchar** cv::NAryMatIterator::ptrs

数据指针

◆ size

size_t cv::NAryMatIterator::size

每个段的大小(以元素为单位)


该类的文档由以下文件生成: