OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
cv::NAryMatIterator 类参考

n 元多维数组迭代器。 更多...

#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
 迭代器步进的超平面的数量
 
Mat平面数
 planes
 
uchar ** ptrs
 数据指针
 
size_t size
 每个段的大小(以元素为单位)
 

保护属性

size_t idx
 
int iterdepth
 

详细描述

n 元多维数组迭代器。

使用此类实现对多维数组的元素级一元、二元以及一般的 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:3176
n 维密集数组类
定义 mat.hpp:830
MatIterator_< _Tp > end()
返回矩阵迭代器,并将其设置为 after-last 矩阵元素。
void create(int rows, int cols, int type)
如果需要,分配新的数组数据。
MatIterator_< _Tp > begin()
返回矩阵迭代器,并将其设置为第一个矩阵元素。
_Tp & at(int i0=0)
返回指定数组元素的引用。
int cols
定义 mat.hpp:2165
int rows
行数和列数,或者矩阵具有 2 个以上维度时的 (-1, -1)
定义 mat.hpp:2165
int type() const
返回矩阵元素的类型。
const Mat ** arrays
迭代的数组
定义 mat.hpp:3505
Mat * planes
planes
定义 mat.hpp:3507
NAryMatIterator()
默认构造函数
用于短数值向量的模板类,Matx 的一个特例。
定义 matx.hpp:369
Scalar sum(InputArray src)
计算数组元素的和。
Scalar_< double > Scalar
定义 types.hpp:709
#define CV_32F
Definition interface.h:78
CV_8UC3
#define CV_8UC3
#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,
I.at<uchar>(y, x) = saturate_cast<uchar>(r); ** ptrs,
int narrays = -1 )

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

◆ NAryMatIterator() [3/3]

cv::NAryMatIterator::NAryMatIterator ( const Mat ** arrays,
Mat * 平面数,
int narrays = -1 )

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

成员函数文档

◆ init()

void cv::NAryMatIterator::init ( const Mat ** arrays,
Mat * 平面数,
I.at<uchar>(y, x) = saturate_cast<uchar>(r); ** 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

planes

◆ ptrs

uchar** cv::NAryMatIterator::ptrs

数据指针

◆ size

size_t cv::NAryMatIterator::size

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


此类文档由以下文件生成