double M_M = (M+1)*(M+1); double* elem =new double [M_M]; int* flag = new int[M_M];为什么会报错?

那个提示是说数组的长度必须昰整型或者枚举类型

把_弄成整型就行了

你对这个回答的评价是?

返回一个恒等指定大小和类型矩陣

该方法返回 atlab 式恒等矩阵初始值设定项,类似 at::zeros()和 at::ones()你可以用缩放操作高效地创建缩放的恒等矩阵:

/ / 创建4 x 4 的对角矩阵并在对角线上以0.1的比率缩小。

分配新的阵列数据 (如果需要)

sizes – 指定一个新的阵列形状的整数数组。

这是关键的at方法之一大多数新样式 OpenCV 函数和产生阵列的方法每个输出数组都调用这个方法。此方法使用如下算法:

1.如果当前数组形状和类型匹配新的请立即返回否则,通过调用 at::release()取消引用以前嘚数据

4.分配新的关联数据的引用计数并将其设置为 1。

这项计划使内存管理强大高效同时还为用户减少了额外输入这意味着通常不需要顯式分配输出数组。也就是说可以不写成:

该方法递增与矩阵数据关联的引用计数。如果矩阵头指向外部的数据集(见 at::at())则引用计数為 NULL,并且该方法在这种情况下不起作用通常情况下,为避免内存泄漏不应显式调用该方法。它是由该矩阵赋值运算符隐式调用在支歭的它平台上,引用计数器递增是一个原子操作因此,对相同的矩阵在不同的线程异步操作是安全的。

在必要的情况下递减引用计數并释放该矩阵。

该方法递减与矩阵的数据关联的引用计数当引用计数减为0时,矩阵的数据将被释放数据和引用计数器指针设置为 NULL。洳果矩阵头指向外部数据集 (见 at::at()) 引用计数为 NULL,并且该方法在这种情况下无效

可以手动调用此方法强制矩阵数据释放。但由于这种方法在析构函数中是自动调用的或以更改数据指针的其他方法,因此通常不需要调用这个函数在支持它的平台上,引用计数器递减并检查是否为0 是一个原子操作因此,在不同的线程异步调用相同的矩阵是安全的操作

s –分配给新添加的元素的值。

该方法更改矩阵的行数如果矩阵重新分配,第一最少(at::rowssz) 行数要保留下来。该方法模拟相应的 STL 向量类的方法

保留一定数量的行的空间。

该方法sz行存储空间如果矩阵已经有足够的空间来存储sz行,没有任何异常发生如果矩阵重新分配,保留前(at::rows) 行该方法模拟了相应的STL 向量类的方法。

将元素添加到矩阵的底部

ele –增加的一个或多个元素。

该方法将一个或多个元素添加到矩阵的底部他们是模拟相应的 STL 向量类的方法。元素为at时其类型和列的数目必须和矩阵容器是相同的。

从底部的列表中删除元素

neles –删除的行的数目。如果它大于总的行数则会引发异常。

该方法从底部的列表中删除一行或多行

wholeSize–输出参数,其中包含的整个矩阵包含大小 * 这是其中一部分

at::rowRange()、at::colRange()以及其他的方法从矩阵中提取子阵後该结果子阵只指向原始大矩阵的一部分。然而每个子阵包含有助于重建的最初矩阵大小和提取子阵在原始矩阵中的位置信息( datastart  dataend ?elds表示)。locateROI方法正是这样做的

调整子阵大小及其在父矩阵中的位置。

dtop –顶部子阵边界向上的平移量

dbotto –底部子阵边界向下的平移量。

dleft –左孓阵边界向左的平移量

dright –右子阵边界向右的平移量。

该方法是 at::locateROI() 的互补性方法这些函数的典型应用是确定父矩阵中子阵的位置,然后以某种方式改变位置尤其典型的是,当滤镜操作中要考虑ROI外的像素时就需要它当方法的所有参数都是正的时候,ROI需要以指定量全方位增長例如:

在此示例中,每个方向 4 元素增加矩阵大小矩阵向左侧和上侧分别平移2 个元素,这会产生5 x 5 内核的滤镜所需的所有像素你的责任是确保 adjustROI 不超出父矩阵边界。如果超出该函数发出错误提示。OpenCV的滤镜函数在内部调用该函数像filter2D(),形态学的操作等等。

rowRange –提取的子阵嘚开始和结束的行不包括的上限。若要选择的所有行请使用 Range::all()。

colRange –提取的子阵的开始和结束的列不包括的上限。若要选择的所有列請使用 Range::all()。

ranges – 选定范围沿每个数组维度的数组

该运算符创建矩阵 Cvat 的头,而不复制的基础数据引用计数未被考虑到此操作中。因此您应該确保Cvat 头在使用的时候不释放原始矩阵。该运算符对于新旧OpenCV API混用是有用的例如:

运算符创建矩阵 IplIage 头,而不复制的基础数据您应该确保使用IplIage头时不释放原矩阵。与at::operatorCvat类似该运算符在OpenCV新旧API混用中很有用。

该方法返回数组元素(如果该数组表示图像的像素数)的数目

如果在烸一行的结尾无间隙连续存储矩阵的元素,该方法返回 true否则,它将返回 false很明显,1 x 1 或 1xN 矩阵始终是连续的使用 at::create() 创建矩阵是始终是连续的。但是如果您提取的矩阵,使用 at::col()、 at::diag()等等,或外部已分配的数据构造的矩阵头的一部分那么这种矩阵可能不再具有此属性。连续性标記在at::flags域内用一个位存储构造矩阵头时可以自动计算出来。因此连续性检查是非常快速的操作,虽然理论上可以做如下所示:

很多的OpenCV 函数中使用该方法。关键在于按元素操作(如算术和逻辑运算、 数学函数、 alpha 融合、颜色空间转换以及其他) 不依赖于图像的几何形状。洇此如果所有的输入和输出的阵列是连续的,该函数可以它们作为很长的单行的向量处理下面的示例阐释了如何实现 alpha 融合功能。

// 规定洳下: 检查阵列的连续性

//如果的确如此阵列连续

// 把阵列看做一维的向量。

// 外循环只执行一次

这种方法不仅很简单,而且在简单的元素嘚操作中可以提高10-20%性能尤其在图像很小且操作非常简单的时候。

在此函数中另一个 OpenCV 语法目标数组中at::create() 的调用会对没有适当大小和类型的目标数组分配空间。虽然新分配的数组始终是连续的但您仍需要检查目标数组,因为 at::create()不是总会分配一个新的矩阵

返回矩阵元素大小 (鉯字节为单位)。

该方法返回以字节为单位的矩阵元素大小例如,如果矩阵类型是 CV_16SC3该方法返回3*sizeof(short)或 6。

以字节为单位返回每个矩阵元素通噵的大小

该方法返回以字节为单位的矩阵元素通道大小,也就是忽略通道的数量例如,

返回一个矩阵元素的类型

该方法返回一个矩陣的元素类型。这是兼容Cvat 类型系统像 CV_16SC3标识符

或 16 位有符号的3 通道阵列,等等

返回一个矩阵元素的深度。

该方法返回矩阵元素深度(每个單独的通道类型)的标识符例如,对于16位有符号的3通道数组该方法返回CV_16S。矩阵类型的完整列表包含以下内容值:

该方法返回矩阵通道嘚数目

返回矩阵归一化迈出的一步。

该方法返回以矩阵的step除以at::eleSize1()它对快速访问任意矩阵元素很有用。

该方法返回一个矩阵大小:Size(cols, rows)矩阵超过 2 维时返回大小为(-1,-1)

返回指定矩阵行的指针。

i –一个基于0的行索引

该方法返回uchar*,或指向由输入指定矩阵行的指针参看at::isContinuous()的中示唎了解如何使用这些方法。

返回对指定数组元素的引用

该模板方法返回指定数组元素的引用。为了具有更高的性能索引范围检查只在調试配置下执行。请注意使用具有单个索引 (i) 的变量可以访问的单行或单列的2 维的数组元素也就是比方说,如果A是1 x N 浮点矩阵和B是 x 1的整数矩陣您只需编写A.at<float>(k+4) 和 B.at<int>(2*i+1)

下面的示例将初始化希尔伯特矩阵:

返回矩阵迭代器,并将其设置为第一矩阵元

该方法返回矩阵的只读或读写的迭代器。矩阵迭代器的使用和双向 STL 迭代器的使用是非常相似的在下面的示例中,alpha融合函数是使用矩阵迭代器重写:

返回矩阵迭代器并将其設置为 最后元素之后(after-last)的矩阵元。

该方法返回矩阵只读或读写的迭代器设置为紧随最后一个矩阵元素的点。

我要回帖

更多关于 A.M 的文章

 

随机推荐