软件包 org.opencv.core
类 Core
- java.lang.Object
-
- org.opencv.core.Core
-
public class Core extends java.lang.Object
-
-
嵌套类摘要
嵌套类 修饰符和类型 类 描述 static classCore.MinMaxLocResult
-
字段摘要
-
构造函数摘要
构造函数 构造函数 描述 Core()
-
方法摘要
所有方法 静态方法 具体方法 已弃用方法 修饰符和类型 方法 描述 static voidabsdiff(Mat src1, Mat src2, Mat dst)计算两个数组之间或数组与标量之间的逐元素绝对差值。static voidabsdiff(Mat src1, Scalar src2, Mat dst)static voidadd(Mat src1, Mat src2, Mat dst)计算两个数组或数组与标量的逐元素之和。static voidadd(Mat src1, Mat src2, Mat dst, Mat mask)计算两个数组或数组与标量的逐元素之和。static voidadd(Mat src1, Mat src2, Mat dst, Mat mask, int dtype)计算两个数组或数组与标量的逐元素之和。static voidadd(Mat src1, Scalar src2, Mat dst)static voidadd(Mat src1, Scalar src2, Mat dst, Mat mask)static voidadd(Mat src1, Scalar src2, Mat dst, Mat mask, int dtype)static voidaddSamplesDataSearchPath(java.lang.String path)通过添加新的搜索位置来覆盖搜索数据路径。仅在需要覆盖默认行为时使用。传递的路径按后进先出(LIFO)顺序使用。static voidaddSamplesDataSearchSubDirectory(java.lang.String subdir)追加示例搜索数据子目录。通常用于添加 OpenCV 模块名称(例如:<opencv_contrib>/modules/<name>/samples/data-><name>/samples/data+modules/<name>/samples/data)。static voidaddWeighted(Mat src1, double alpha, Mat src2, double beta, double gamma, Mat dst)计算两个数组的加权和。static voidaddWeighted(Mat src1, double alpha, Mat src2, double beta, double gamma, Mat dst, int dtype)计算两个数组的加权和。static voidbatchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx)朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档static voidbatchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType)朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档static voidbatchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType, int K)朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档static voidbatchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType, int K, Mat mask)朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档static voidbatchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType, int K, Mat mask, int update)朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档static voidbatchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType, int K, Mat mask, int update, boolean crosscheck)朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档static voidbitwise_and(Mat src1, Mat src2, Mat dst)计算两个数组的逐位与运算 (dst = src1 & src2)。计算两个数组或数组与标量的逐位与。static voidbitwise_and(Mat src1, Mat src2, Mat dst, Mat mask)计算两个数组的逐位与运算 (dst = src1 & src2)。计算两个数组或数组与标量的逐位与。static voidbitwise_not(Mat src, Mat dst)对数组的每一位取反。static voidbitwise_not(Mat src, Mat dst, Mat mask)对数组的每一位取反。static voidbitwise_or(Mat src1, Mat src2, Mat dst)计算两个数组或数组与标量的逐位或运算。static voidbitwise_or(Mat src1, Mat src2, Mat dst, Mat mask)计算两个数组或数组与标量的逐位或运算。static voidbitwise_xor(Mat src1, Mat src2, Mat dst)计算两个数组或数组与标量的逐位“异或”运算。static voidbitwise_xor(Mat src1, Mat src2, Mat dst, Mat mask)计算两个数组或数组与标量的逐位“异或”运算。static intborderInterpolate(int p, int len, int borderType)计算外推像素的源位置。static voidbroadcast(Mat src, Mat shape, Mat dst)将给定的 Mat 广播到指定的形状。static voidcalcCovarMatrix(Mat samples, Mat covar, Mat mean, int flags)注意: 使用 #COVAR_ROWS 或 #COVAR_COLS 标志static voidcalcCovarMatrix(Mat samples, Mat covar, Mat mean, int flags, int ctype)注意: 使用 #COVAR_ROWS 或 #COVAR_COLS 标志static voidcartToPolar(Mat x, Mat y, Mat magnitude, Mat angle)计算二维向量的幅值和角度。static voidcartToPolar(Mat x, Mat y, Mat magnitude, Mat angle, boolean angleInDegrees)计算二维向量的幅值和角度。static booleancheckHardwareSupport(int feature)如果主机硬件支持指定的功能,则返回 true。static booleancheckRange(Mat a)检查输入数组中的每个元素是否含有无效值。static booleancheckRange(Mat a, boolean quiet)检查输入数组中的每个元素是否含有无效值。static booleancheckRange(Mat a, boolean quiet, double minVal)检查输入数组中的每个元素是否含有无效值。static booleancheckRange(Mat a, boolean quiet, double minVal, double maxVal)检查输入数组中的每个元素是否含有无效值。static voidcompare(Mat src1, Mat src2, Mat dst, int cmpop)执行两个数组或数组与标量值的逐元素比较。static voidcompare(Mat src1, Scalar src2, Mat dst, int cmpop)static voidcompleteSymm(Mat m)将方阵的下半部分或上半部分复制到另一半。static voidcompleteSymm(Mat m, boolean lowerToUpper)将方阵的下半部分或上半部分复制到另一半。static voidconvertFp16(Mat src, Mat dst)已弃用。请改用 Mat::convertTo 并配合 CV_16F 使用。static voidconvertScaleAbs(Mat src, Mat dst)进行缩放,计算绝对值,并将结果转换为 8 位格式。static voidconvertScaleAbs(Mat src, Mat dst, double alpha)进行缩放,计算绝对值,并将结果转换为 8 位格式。static voidconvertScaleAbs(Mat src, Mat dst, double alpha, double beta)进行缩放,计算绝对值,并将结果转换为 8 位格式。static voidcopyMakeBorder(Mat src, Mat dst, int top, int bottom, int left, int right, int borderType)在图像周围形成边框。static voidcopyMakeBorder(Mat src, Mat dst, int top, int bottom, int left, int right, int borderType, Scalar value)在图像周围形成边框。static voidcopyTo(Mat src, Mat dst, Mat mask)这是一个重载的成员函数,为了方便 (python) 而提供。将矩阵复制到另一个矩阵中。static intcountNonZero(Mat src)统计非零数组元素的数量。static floatcubeRoot(float val)计算参数的立方根。static voiddct(Mat src, Mat dst)对一维或二维数组执行正向或逆向离散余弦变换。static voiddct(Mat src, Mat dst, int flags)对一维或二维数组执行正向或逆向离散余弦变换。static doubledeterminant(Mat mtx)返回浮点方阵的行列式。static voiddft(Mat src, Mat dst)对一维或二维浮点数组执行正向或逆向离散傅里叶变换。static voiddft(Mat src, Mat dst, int flags)对一维或二维浮点数组执行正向或逆向离散傅里叶变换。static voiddft(Mat src, Mat dst, int flags, int nonzeroRows)对一维或二维浮点数组执行正向或逆向离散傅里叶变换。static voiddivide(double scale, Mat src2, Mat dst)static voiddivide(double scale, Mat src2, Mat dst, int dtype)static voiddivide(Mat src1, Mat src2, Mat dst)执行两个数组的逐元素除法,或标量除以数组。static voiddivide(Mat src1, Mat src2, Mat dst, double scale)执行两个数组的逐元素除法,或标量除以数组。static voiddivide(Mat src1, Mat src2, Mat dst, double scale, int dtype)执行两个数组的逐元素除法,或标量除以数组。static voiddivide(Mat src1, Scalar src2, Mat dst)static voiddivide(Mat src1, Scalar src2, Mat dst, double scale)static voiddivide(Mat src1, Scalar src2, Mat dst, double scale, int dtype)static booleaneigen(Mat src, Mat eigenvalues)计算对称矩阵的特征值和特征向量。static booleaneigen(Mat src, Mat eigenvalues, Mat eigenvectors)计算对称矩阵的特征值和特征向量。static voideigenNonSymmetric(Mat src, Mat eigenvalues, Mat eigenvectors)计算非对称矩阵的特征值和特征向量(仅限实特征值)。static voidexp(Mat src, Mat dst)计算每个数组元素的指数。static voidextractChannel(Mat src, Mat dst, int coi)从 src 中提取单个通道(coi 是从 0 开始的索引)static floatfastAtan2(float y, float x)以度为单位计算 2D 向量的角度。static java.lang.StringfindFile(java.lang.String relative_path)尝试查找请求的数据文件。搜索目录:1.static java.lang.StringfindFile(java.lang.String relative_path, boolean required)尝试查找请求的数据文件。搜索目录:1.static java.lang.StringfindFile(java.lang.String relative_path, boolean required, boolean silentMode)尝试查找请求的数据文件。搜索目录:1.static java.lang.StringfindFileOrKeep(java.lang.String relative_path)static java.lang.StringfindFileOrKeep(java.lang.String relative_path, boolean silentMode)static voidfindNonZero(Mat src, Mat idx)返回非零像素位置列表。给定一个二值矩阵(通常由 threshold()、compare()、>、== 等操作返回),将所有非零索引作为 cv::Mat 或 std::vector<cv::Point> (x,y) 返回。例如:cv::Mat binaryImage; // 输入,二值图像 cv::Mat locations; // 输出,非零像素的位置 cv::findNonZero(binaryImage, locations); // 访问像素坐标 Point pnt = locations.at<Point>(i);或cv::Mat binaryImage; // 输入,二值图像 vector<Point> locations; // 输出,非零像素的位置 cv::findNonZero(binaryImage, locations); // 访问像素坐标 Point pnt = locations[i];该函数不适用于多通道数组。static voidflip(Mat src, Mat dst, int flipCode)沿垂直轴、水平轴或双轴翻转二维数组。static voidflipND(Mat src, Mat dst, int axis)在给定轴上翻转 n 维数组static voidgemm(Mat src1, Mat src2, double alpha, Mat src3, double beta, Mat dst)执行广义矩阵乘法。static voidgemm(Mat src1, Mat src2, double alpha, Mat src3, double beta, Mat dst, int flags)执行广义矩阵乘法。static java.lang.StringgetBuildInformation()返回配置时的完整 cmake 输出。static java.lang.StringgetCPUFeaturesLine()返回编译期间启用的 CPU 功能列表。static longgetCPUTickCount()返回 CPU 滴答数。static intgetDefaultAlgorithmHint()static java.lang.StringgetHardwareFeatureName(int feature)通过 ID 返回功能名称。如果未定义该功能,则返回空字符串。static java.lang.StringgetIppVersion()static intgetNumberOfCPUs()返回进程可用的逻辑 CPU 数量。static intgetNumThreads()返回 OpenCV 在并行区域使用的线程数。static intgetOptimalDFTSize(int vecsize)返回给定向量大小的最佳 DFT 大小。static intgetThreadNum()已弃用。当前实现与此文档不对应。static longgetTickCount()返回滴答数。static doublegetTickFrequency()返回每秒的滴答数。static intgetVersionMajor()返回库的主版本号static intgetVersionMinor()返回库的次版本号static intgetVersionRevision()返回库版本号的修订字段static java.lang.StringgetVersionString()返回库版本字符串。例如 "3.4.1-dev"。static booleanhasNonZero(Mat src)检查数组中是否至少存在一个非零元素。static voidhconcat(java.util.List<Mat> src, Mat dst)std::vector<cv::Mat> matrices = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)), cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)), cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),}; cv::Mat out; cv::hconcat( matrices, out ); //out: //[1, 2, 3; // 1, 2, 3; // 1, 2, 3; // 1, 2, 3]static voididct(Mat src, Mat dst)计算一维或二维数组的逆离散余弦变换。static voididct(Mat src, Mat dst, int flags)计算一维或二维数组的逆离散余弦变换。static voididft(Mat src, Mat dst)计算一维或二维数组的逆离散傅里叶变换。static voididft(Mat src, Mat dst, int flags)计算一维或二维数组的逆离散傅里叶变换。static voididft(Mat src, Mat dst, int flags, int nonzeroRows)计算一维或二维数组的逆离散傅里叶变换。static voidinRange(Mat src, Scalar lowerb, Scalar upperb, Mat dst)检查数组元素是否落在另外两个数组的对应元素之间。static voidinsertChannel(Mat src, Mat dst, int coi)将单个通道插入 dst(coi 是从 0 开始的索引)static doubleinvert(Mat src, Mat dst)计算矩阵的逆或伪逆。static doubleinvert(Mat src, Mat dst, int flags)计算矩阵的逆或伪逆。static doublekmeans(Mat data, int K, Mat bestLabels, TermCriteria criteria, int attempts, int flags)查找聚类中心并将输入样本围绕聚类进行分组。static doublekmeans(Mat data, int K, Mat bestLabels, TermCriteria criteria, int attempts, int flags, Mat centers)查找聚类中心并将输入样本围绕聚类进行分组。static voidlog(Mat src, Mat dst)计算每个数组元素的自然对数。static voidLUT(Mat src, Mat lut, Mat dst)对数组执行查找表变换。static voidmagnitude(Mat x, Mat y, Mat magnitude)计算二维向量的幅值。static doubleMahalanobis(Mat v1, Mat v2, Mat icovar)计算两个向量之间的马氏距离。static voidmax(Mat src1, Mat src2, Mat dst)计算两个数组或数组与标量的逐元素最大值。static voidmax(Mat src1, Scalar src2, Mat dst)static Scalarmean(Mat src)计算数组元素的平均值(均值)。static Scalarmean(Mat src, Mat mask)计算数组元素的平均值(均值)。static voidmeanStdDev(Mat src, MatOfDouble mean, MatOfDouble stddev)计算数组元素的均值和标准差。static voidmeanStdDev(Mat src, MatOfDouble mean, MatOfDouble stddev, Mat mask)计算数组元素的均值和标准差。static voidmerge(java.util.List<Mat> mv, Mat dst)static voidmin(Mat src1, Mat src2, Mat dst)计算两个数组或数组与标量的逐元素最小值。static voidmin(Mat src1, Scalar src2, Mat dst)static Core.MinMaxLocResultminMaxLoc(Mat src)static Core.MinMaxLocResultminMaxLoc(Mat src, Mat mask)static voidmixChannels(java.util.List<Mat> src, java.util.List<Mat> dst, MatOfInt fromTo)static voidmulSpectrums(Mat a, Mat b, Mat c, int flags)执行两个傅里叶频谱的逐元素乘法。static voidmulSpectrums(Mat a, Mat b, Mat c, int flags, boolean conjB)执行两个傅里叶频谱的逐元素乘法。static voidmultiply(Mat src1, Mat src2, Mat dst)计算两个数组的逐元素缩放乘积。static voidmultiply(Mat src1, Mat src2, Mat dst, double scale)计算两个数组的逐元素缩放乘积。static voidmultiply(Mat src1, Mat src2, Mat dst, double scale, int dtype)计算两个数组的逐元素缩放乘积。static voidmultiply(Mat src1, Scalar src2, Mat dst)static voidmultiply(Mat src1, Scalar src2, Mat dst, double scale)static voidmultiply(Mat src1, Scalar src2, Mat dst, double scale, int dtype)static voidmulTransposed(Mat src, Mat dst, boolean aTa)计算矩阵与其转置的乘积。static voidmulTransposed(Mat src, Mat dst, boolean aTa, Mat delta)计算矩阵与其转置的乘积。static voidmulTransposed(Mat src, Mat dst, boolean aTa, Mat delta, double scale)计算矩阵与其转置的乘积。static voidmulTransposed(Mat src, Mat dst, boolean aTa, Mat delta, double scale, int dtype)计算矩阵与其转置的乘积。static doublenorm(Mat src1)计算数组的绝对范数。static doublenorm(Mat src1, int normType)计算数组的绝对范数。static doublenorm(Mat src1, int normType, Mat mask)计算数组的绝对范数。static doublenorm(Mat src1, Mat src2)计算绝对差范数或相对差范数。static doublenorm(Mat src1, Mat src2, int normType)计算绝对差范数或相对差范数。static doublenorm(Mat src1, Mat src2, int normType, Mat mask)计算绝对差范数或相对差范数。static voidnormalize(Mat src, Mat dst)归一化数组的范数或数值范围。static voidnormalize(Mat src, Mat dst, double alpha)归一化数组的范数或数值范围。static voidnormalize(Mat src, Mat dst, double alpha, double beta)归一化数组的范数或数值范围。static voidnormalize(Mat src, Mat dst, double alpha, double beta, int norm_type)归一化数组的范数或数值范围。static voidnormalize(Mat src, Mat dst, double alpha, double beta, int norm_type, int dtype)归一化数组的范数或数值范围。static voidnormalize(Mat src, Mat dst, double alpha, double beta, int norm_type, int dtype, Mat mask)归一化数组的范数或数值范围。static voidpatchNaNs(Mat a)将矩阵中的 NaN(非数字值)替换为指定值。static voidpatchNaNs(Mat a, double val)将矩阵中的 NaN(非数字值)替换为指定值。static voidPCABackProject(Mat data, Mat mean, Mat eigenvectors, Mat result)包装 PCA::backProjectstatic voidPCACompute(Mat data, Mat mean, Mat eigenvectors)封装 PCA::operator()static voidPCACompute(Mat data, Mat mean, Mat eigenvectors, double retainedVariance)封装 PCA::operator()static voidPCACompute(Mat data, Mat mean, Mat eigenvectors, int maxComponents)封装 PCA::operator()static voidPCACompute2(Mat data, Mat mean, Mat eigenvectors, Mat eigenvalues)封装 PCA::operator() 并增加 eigenvalues 输出参数static voidPCACompute2(Mat data, Mat mean, Mat eigenvectors, Mat eigenvalues, double retainedVariance)封装 PCA::operator() 并增加 eigenvalues 输出参数static voidPCACompute2(Mat data, Mat mean, Mat eigenvectors, Mat eigenvalues, int maxComponents)封装 PCA::operator() 并增加 eigenvalues 输出参数static voidPCAProject(Mat data, Mat mean, Mat eigenvectors, Mat result)包装 PCA::projectstatic voidperspectiveTransform(Mat src, Mat dst, Mat m)执行向量的透视矩阵变换。static voidphase(Mat x, Mat y, Mat angle)计算二维向量的旋转角度。static voidphase(Mat x, Mat y, Mat angle, boolean angleInDegrees)计算二维向量的旋转角度。static voidpolarToCart(Mat magnitude, Mat angle, Mat x, Mat y)根据二维向量的幅值和角度计算其 x 和 y 坐标。static voidpolarToCart(Mat magnitude, Mat angle, Mat x, Mat y, boolean angleInDegrees)根据二维向量的幅值和角度计算其 x 和 y 坐标。static voidpow(Mat src, double power, Mat dst)计算每个数组元素的幂。static doublePSNR(Mat src1, Mat src2)计算峰值信噪比 (PSNR) 图像质量指标。static doublePSNR(Mat src1, Mat src2, double R)计算峰值信噪比 (PSNR) 图像质量指标。static voidrandn(Mat dst, double mean, double stddev)用正态分布的随机数填充数组。static voidrandShuffle(Mat dst)随机打乱数组元素。static voidrandShuffle(Mat dst, double iterFactor)随机打乱数组元素。static voidrandu(Mat dst, double low, double high)生成单个均匀分布的随机数或随机数数组。static voidreduce(Mat src, Mat dst, int dim, int rtype)将矩阵降维为向量。static voidreduce(Mat src, Mat dst, int dim, int rtype, int dtype)将矩阵降维为向量。static voidreduceArgMax(Mat src, Mat dst, int axis)沿指定轴查找最大元素的索引。注意: - 如果输入或输出数组不连续,此函数将创建一个内部副本。static voidreduceArgMax(Mat src, Mat dst, int axis, boolean lastIndex)沿指定轴查找最大元素的索引。注意: - 如果输入或输出数组不连续,此函数将创建一个内部副本。static voidreduceArgMin(Mat src, Mat dst, int axis)沿指定轴查找最小元素的索引。注意: - 如果输入或输出数组不连续,此函数将创建一个内部副本。static voidreduceArgMin(Mat src, Mat dst, int axis, boolean lastIndex)沿指定轴查找最小元素的索引。注意: - 如果输入或输出数组不连续,此函数将创建一个内部副本。static voidrepeat(Mat src, int ny, int nx, Mat dst)用输入数组的重复副本填充输出数组。static voidrotate(Mat src, Mat dst, int rotateCode)以 90 度的倍数旋转 2D 数组。static voidscaleAdd(Mat src1, double alpha, Mat src2, Mat dst)计算缩放后的数组与另一个数组之和。static voidsetErrorVerbosity(boolean verbose)static voidsetIdentity(Mat mtx)初始化一个缩放后的单位矩阵。static voidsetIdentity(Mat mtx, Scalar s)初始化一个缩放后的单位矩阵。static voidsetNumThreads(int nthreads)OpenCV 将尝试为随后的并行区域设置线程数。static voidsetRNGSeed(int seed)设置默认随机数生成器的状态。static voidsetUseIPP(boolean flag)static voidsetUseIPP_NotExact(boolean flag)static voidsetUseOptimized(boolean onoff)启用或禁用优化代码。static booleansolve(Mat src1, Mat src2, Mat dst)求解一个或多个线性系统或最小二乘问题。static booleansolve(Mat src1, Mat src2, Mat dst, int flags)求解一个或多个线性系统或最小二乘问题。static intsolveCubic(Mat coeffs, Mat roots)求三次方程的实根。static doublesolvePoly(Mat coeffs, Mat roots)求多项式方程的实根或复根。static doublesolvePoly(Mat coeffs, Mat roots, int maxIters)求多项式方程的实根或复根。static voidsort(Mat src, Mat dst, int flags)对矩阵的每一行或每一列进行排序。static voidsortIdx(Mat src, Mat dst, int flags)对矩阵的每一行或每一列进行排序。static voidsplit(Mat m, java.util.List<Mat> mv)static voidsqrt(Mat src, Mat dst)计算数组元素的平方根。static voidsubtract(Mat src1, Mat src2, Mat dst)计算两个数组或数组与标量之间的逐元素差值。static voidsubtract(Mat src1, Mat src2, Mat dst, Mat mask)计算两个数组或数组与标量之间的逐元素差值。static voidsubtract(Mat src1, Mat src2, Mat dst, Mat mask, int dtype)计算两个数组或数组与标量之间的逐元素差值。static voidsubtract(Mat src1, Scalar src2, Mat dst)static voidsubtract(Mat src1, Scalar src2, Mat dst, Mat mask)static voidsubtract(Mat src1, Scalar src2, Mat dst, Mat mask, int dtype)static ScalarsumElems(Mat src)计算数组元素的总和。static voidSVBackSubst(Mat w, Mat u, Mat vt, Mat rhs, Mat dst)包装 SVD::backSubststatic voidSVDecomp(Mat src, Mat w, Mat u, Mat vt)包装 SVD::computestatic voidSVDecomp(Mat src, Mat w, Mat u, Mat vt, int flags)包装 SVD::computestatic Scalartrace(Mat mtx)返回矩阵的迹。static voidtransform(Mat src, Mat dst, Mat m)对数组的每个元素执行矩阵变换。static voidtranspose(Mat src, Mat dst)矩阵转置。static voidtransposeND(Mat src, MatOfInt order, Mat dst)n 维矩阵的转置。static booleanuseIPP()hal::Cholesky 的代理static booleanuseIPP_NotExact()static booleanuseOptimized()返回优化代码的使用状态。static voidvconcat(java.util.List<Mat> src, Mat dst)std::vector<cv::Mat> matrices = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)), cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)), cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),}; cv::Mat out; cv::vconcat( matrices, out ); //out: //[1, 1, 1, 1; // 2, 2, 2, 2; // 3, 3, 3, 3]
-
-
-
字段详情
-
VERSION
public static final java.lang.String VERSION
-
NATIVE_LIBRARY_NAME
public static final java.lang.String NATIVE_LIBRARY_NAME
-
VERSION_MAJOR
public static final int VERSION_MAJOR
-
VERSION_MINOR
public static final int VERSION_MINOR
-
VERSION_REVISION
public static final int VERSION_REVISION
-
VERSION_STATUS
public static final java.lang.String VERSION_STATUS
-
SVD_MODIFY_A
public static final int SVD_MODIFY_A
- 另请参阅
- 常量字段值
-
SVD_NO_UV
public static final int SVD_NO_UV
- 另请参阅
- 常量字段值
-
SVD_FULL_UV
public static final int SVD_FULL_UV
- 另请参阅
- 常量字段值
-
FILLED
public static final int FILLED
- 另请参阅
- 常量字段值
-
REDUCE_SUM
public static final int REDUCE_SUM
- 另请参阅
- 常量字段值
-
REDUCE_AVG
public static final int REDUCE_AVG
- 另请参阅
- 常量字段值
-
REDUCE_MAX
public static final int REDUCE_MAX
- 另请参阅
- 常量字段值
-
REDUCE_MIN
public static final int REDUCE_MIN
- 另请参阅
- 常量字段值
-
RNG_UNIFORM
public static final int RNG_UNIFORM
- 另请参阅
- 常量字段值
-
RNG_NORMAL
public static final int RNG_NORMAL
- 另请参阅
- 常量字段值
-
ALGO_HINT_DEFAULT
public static final int ALGO_HINT_DEFAULT
- 另请参阅
- 常量字段值
-
ALGO_HINT_ACCURATE
public static final int ALGO_HINT_ACCURATE
- 另请参阅
- 常量字段值
-
ALGO_HINT_APPROX
public static final int ALGO_HINT_APPROX
- 另请参阅
- 常量字段值
-
BORDER_CONSTANT
public static final int BORDER_CONSTANT
- 另请参阅
- 常量字段值
-
BORDER_REPLICATE
public static final int BORDER_REPLICATE
- 另请参阅
- 常量字段值
-
BORDER_REFLECT
public static final int BORDER_REFLECT
- 另请参阅
- 常量字段值
-
BORDER_WRAP
public static final int BORDER_WRAP
- 另请参阅
- 常量字段值
-
BORDER_REFLECT_101
public static final int BORDER_REFLECT_101
- 另请参阅
- 常量字段值
-
BORDER_TRANSPARENT
public static final int BORDER_TRANSPARENT
- 另请参阅
- 常量字段值
-
BORDER_REFLECT101
public static final int BORDER_REFLECT101
- 另请参阅
- 常量字段值
-
BORDER_DEFAULT
public static final int BORDER_DEFAULT
- 另请参阅
- 常量字段值
-
BORDER_ISOLATED
public static final int BORDER_ISOLATED
- 另请参阅
- 常量字段值
-
CMP_EQ
public static final int CMP_EQ
- 另请参阅
- 常量字段值
-
CMP_GT
public static final int CMP_GT
- 另请参阅
- 常量字段值
-
CMP_GE
public static final int CMP_GE
- 另请参阅
- 常量字段值
-
CMP_LT
public static final int CMP_LT
- 另请参阅
- 常量字段值
-
CMP_LE
public static final int CMP_LE
- 另请参阅
- 常量字段值
-
CMP_NE
public static final int CMP_NE
- 另请参阅
- 常量字段值
-
COVAR_SCRAMBLED
public static final int COVAR_SCRAMBLED
- 另请参阅
- 常量字段值
-
COVAR_NORMAL
public static final int COVAR_NORMAL
- 另请参阅
- 常量字段值
-
COVAR_USE_AVG
public static final int COVAR_USE_AVG
- 另请参阅
- 常量字段值
-
COVAR_SCALE
public static final int COVAR_SCALE
- 另请参阅
- 常量字段值
-
COVAR_ROWS
public static final int COVAR_ROWS
- 另请参阅
- 常量字段值
-
COVAR_COLS
public static final int COVAR_COLS
- 另请参阅
- 常量字段值
-
DECOMP_LU
public static final int DECOMP_LU
- 另请参阅
- 常量字段值
-
DECOMP_SVD
public static final int DECOMP_SVD
- 另请参阅
- 常量字段值
-
DECOMP_EIG
public static final int DECOMP_EIG
- 另请参阅
- 常量字段值
-
DECOMP_CHOLESKY
public static final int DECOMP_CHOLESKY
- 另请参阅
- 常量字段值
-
DECOMP_QR
public static final int DECOMP_QR
- 另请参阅
- 常量字段值
-
DECOMP_NORMAL
public static final int DECOMP_NORMAL
- 另请参阅
- 常量字段值
-
DFT_INVERSE
public static final int DFT_INVERSE
- 另请参阅
- 常量字段值
-
DFT_SCALE
public static final int DFT_SCALE
- 另请参阅
- 常量字段值
-
DFT_ROWS
public static final int DFT_ROWS
- 另请参阅
- 常量字段值
-
DFT_COMPLEX_OUTPUT
public static final int DFT_COMPLEX_OUTPUT
- 另请参阅
- 常量字段值
-
DFT_REAL_OUTPUT
public static final int DFT_REAL_OUTPUT
- 另请参阅
- 常量字段值
-
DFT_COMPLEX_INPUT
public static final int DFT_COMPLEX_INPUT
- 另请参阅
- 常量字段值
-
DCT_INVERSE
public static final int DCT_INVERSE
- 另请参阅
- 常量字段值
-
DCT_ROWS
public static final int DCT_ROWS
- 另请参阅
- 常量字段值
-
StsOk
public static final int StsOk
- 另请参阅
- 常量字段值
-
StsBackTrace
public static final int StsBackTrace
- 另请参阅
- 常量字段值
-
StsError
public static final int StsError
- 另请参阅
- 常量字段值
-
StsInternal
public static final int StsInternal
- 另请参阅
- 常量字段值
-
StsNoMem
public static final int StsNoMem
- 另请参阅
- 常量字段值
-
StsBadArg
public static final int StsBadArg
- 另请参阅
- 常量字段值
-
StsBadFunc
public static final int StsBadFunc
- 另请参阅
- 常量字段值
-
StsNoConv
public static final int StsNoConv
- 另请参阅
- 常量字段值
-
StsAutoTrace
public static final int StsAutoTrace
- 另请参阅
- 常量字段值
-
HeaderIsNull
public static final int HeaderIsNull
- 另请参阅
- 常量字段值
-
BadImageSize
public static final int BadImageSize
- 另请参阅
- 常量字段值
-
BadOffset
public static final int BadOffset
- 另请参阅
- 常量字段值
-
BadDataPtr
public static final int BadDataPtr
- 另请参阅
- 常量字段值
-
BadStep
public static final int BadStep
- 另请参阅
- 常量字段值
-
BadModelOrChSeq
public static final int BadModelOrChSeq
- 另请参阅
- 常量字段值
-
BadNumChannels
public static final int BadNumChannels
- 另请参阅
- 常量字段值
-
BadNumChannel1U
public static final int BadNumChannel1U
- 另请参阅
- 常量字段值
-
BadDepth
public static final int BadDepth
- 另请参阅
- 常量字段值
-
BadAlphaChannel
public static final int BadAlphaChannel
- 另请参阅
- 常量字段值
-
BadOrder
public static final int BadOrder
- 另请参阅
- 常量字段值
-
BadOrigin
public static final int BadOrigin
- 另请参阅
- 常量字段值
-
BadAlign
public static final int BadAlign
- 另请参阅
- 常量字段值
-
BadCallBack
public static final int BadCallBack
- 另请参阅
- 常量字段值
-
BadTileSize
public static final int BadTileSize
- 另请参阅
- 常量字段值
-
BadCOI
public static final int BadCOI
- 另请参阅
- 常量字段值
-
BadROISize
public static final int BadROISize
- 另请参阅
- 常量字段值
-
MaskIsTiled
public static final int MaskIsTiled
- 另请参阅
- 常量字段值
-
StsNullPtr
public static final int StsNullPtr
- 另请参阅
- 常量字段值
-
StsVecLengthErr
public static final int StsVecLengthErr
- 另请参阅
- 常量字段值
-
StsFilterStructContentErr
public static final int StsFilterStructContentErr
- 另请参阅
- 常量字段值
-
StsKernelStructContentErr
public static final int StsKernelStructContentErr
- 另请参阅
- 常量字段值
-
StsFilterOffsetErr
public static final int StsFilterOffsetErr
- 另请参阅
- 常量字段值
-
StsBadSize
public static final int StsBadSize
- 另请参阅
- 常量字段值
-
StsDivByZero
public static final int StsDivByZero
- 另请参阅
- 常量字段值
-
StsInplaceNotSupported
public static final int StsInplaceNotSupported
- 另请参阅
- 常量字段值
-
StsObjectNotFound
public static final int StsObjectNotFound
- 另请参阅
- 常量字段值
-
StsUnmatchedFormats
public static final int StsUnmatchedFormats
- 另请参阅
- 常量字段值
-
StsBadFlag
public static final int StsBadFlag
- 另请参阅
- 常量字段值
-
StsBadPoint
public static final int StsBadPoint
- 另请参阅
- 常量字段值
-
StsBadMask
public static final int StsBadMask
- 另请参阅
- 常量字段值
-
StsUnmatchedSizes
public static final int StsUnmatchedSizes
- 另请参阅
- 常量字段值
-
StsUnsupportedFormat
public static final int StsUnsupportedFormat
- 另请参阅
- 常量字段值
-
StsOutOfRange
public static final int StsOutOfRange
- 另请参阅
- 常量字段值
-
StsParseError
public static final int StsParseError
- 另请参阅
- 常量字段值
-
StsNotImplemented
public static final int StsNotImplemented
- 另请参阅
- 常量字段值
-
StsBadMemBlock
public static final int StsBadMemBlock
- 另请参阅
- 常量字段值
-
StsAssert
public static final int StsAssert
- 另请参阅
- 常量字段值
-
GpuNotSupported
public static final int GpuNotSupported
- 另请参阅
- 常量字段值
-
GpuApiCallError
public static final int GpuApiCallError
- 另请参阅
- 常量字段值
-
OpenGlNotSupported
public static final int OpenGlNotSupported
- 另请参阅
- 常量字段值
-
OpenGlApiCallError
public static final int OpenGlApiCallError
- 另请参阅
- 常量字段值
-
OpenCLApiCallError
public static final int OpenCLApiCallError
- 另请参阅
- 常量字段值
-
OpenCLDoubleNotSupported
public static final int OpenCLDoubleNotSupported
- 另请参阅
- 常量字段值
-
OpenCLInitError
public static final int OpenCLInitError
- 另请参阅
- 常量字段值
-
OpenCLNoAMDBlasFft
public static final int OpenCLNoAMDBlasFft
- 另请参阅
- 常量字段值
-
Formatter_FMT_DEFAULT
public static final int Formatter_FMT_DEFAULT
- 另请参阅
- 常量字段值
-
Formatter_FMT_MATLAB
public static final int Formatter_FMT_MATLAB
- 另请参阅
- 常量字段值
-
Formatter_FMT_CSV
public static final int Formatter_FMT_CSV
- 另请参阅
- 常量字段值
-
Formatter_FMT_PYTHON
public static final int Formatter_FMT_PYTHON
- 另请参阅
- 常量字段值
-
Formatter_FMT_NUMPY
public static final int Formatter_FMT_NUMPY
- 另请参阅
- 常量字段值
-
Formatter_FMT_C
public static final int Formatter_FMT_C
- 另请参阅
- 常量字段值
-
GEMM_1_T
public static final int GEMM_1_T
- 另请参阅
- 常量字段值
-
GEMM_2_T
public static final int GEMM_2_T
- 另请参阅
- 常量字段值
-
GEMM_3_T
public static final int GEMM_3_T
- 另请参阅
- 常量字段值
-
KMEANS_RANDOM_CENTERS
public static final int KMEANS_RANDOM_CENTERS
- 另请参阅
- 常量字段值
-
KMEANS_PP_CENTERS
public static final int KMEANS_PP_CENTERS
- 另请参阅
- 常量字段值
-
KMEANS_USE_INITIAL_LABELS
public static final int KMEANS_USE_INITIAL_LABELS
- 另请参阅
- 常量字段值
-
NORM_INF
public static final int NORM_INF
- 另请参阅
- 常量字段值
-
NORM_L1
public static final int NORM_L1
- 另请参阅
- 常量字段值
-
NORM_L2
public static final int NORM_L2
- 另请参阅
- 常量字段值
-
NORM_L2SQR
public static final int NORM_L2SQR
- 另请参阅
- 常量字段值
-
NORM_HAMMING
public static final int NORM_HAMMING
- 另请参阅
- 常量字段值
-
NORM_HAMMING2
public static final int NORM_HAMMING2
- 另请参阅
- 常量字段值
-
NORM_TYPE_MASK
public static final int NORM_TYPE_MASK
- 另请参阅
- 常量字段值
-
NORM_RELATIVE
public static final int NORM_RELATIVE
- 另请参阅
- 常量字段值
-
NORM_MINMAX
public static final int NORM_MINMAX
- 另请参阅
- 常量字段值
-
PCA_DATA_AS_ROW
public static final int PCA_DATA_AS_ROW
- 另请参阅
- 常量字段值
-
PCA_DATA_AS_COL
public static final int PCA_DATA_AS_COL
- 另请参阅
- 常量字段值
-
PCA_USE_AVG
public static final int PCA_USE_AVG
- 另请参阅
- 常量字段值
-
Param_INT
public static final int Param_INT
- 另请参阅
- 常量字段值
-
Param_BOOLEAN
public static final int Param_BOOLEAN
- 另请参阅
- 常量字段值
-
Param_REAL
public static final int Param_REAL
- 另请参阅
- 常量字段值
-
Param_STRING
public static final int Param_STRING
- 另请参阅
- 常量字段值
-
Param_MAT
public static final int Param_MAT
- 另请参阅
- 常量字段值
-
Param_MAT_VECTOR
public static final int Param_MAT_VECTOR
- 另请参阅
- 常量字段值
-
Param_ALGORITHM
public static final int Param_ALGORITHM
- 另请参阅
- 常量字段值
-
Param_FLOAT
public static final int Param_FLOAT
- 另请参阅
- 常量字段值
-
Param_UNSIGNED_INT
public static final int Param_UNSIGNED_INT
- 另请参阅
- 常量字段值
-
Param_UINT64
public static final int Param_UINT64
- 另请参阅
- 常量字段值
-
Param_UCHAR
public static final int Param_UCHAR
- 另请参阅
- 常量字段值
-
Param_SCALAR
public static final int Param_SCALAR
- 另请参阅
- 常量字段值
-
REDUCE_SUM2
public static final int REDUCE_SUM2
- 另请参阅
- 常量字段值
-
ROTATE_90_CLOCKWISE
public static final int ROTATE_90_CLOCKWISE
- 另请参阅
- 常量字段值
-
ROTATE_180
public static final int ROTATE_180
- 另请参阅
- 常量字段值
-
ROTATE_90_COUNTERCLOCKWISE
public static final int ROTATE_90_COUNTERCLOCKWISE
- 另请参阅
- 常量字段值
-
SORT_EVERY_ROW
public static final int SORT_EVERY_ROW
- 另请参阅
- 常量字段值
-
SORT_EVERY_COLUMN
public static final int SORT_EVERY_COLUMN
- 另请参阅
- 常量字段值
-
SORT_ASCENDING
public static final int SORT_ASCENDING
- 另请参阅
- 常量字段值
-
SORT_DESCENDING
public static final int SORT_DESCENDING
- 另请参阅
- 常量字段值
-
-
方法详情
-
cubeRoot
public static float cubeRoot(float val)
计算参数的立方根。函数 cubeRoot 计算 \(\sqrt[3]{\texttt{val}}\)。能正确处理负参数。不处理 NaN 和 Inf。对于单精度数据,精度接近最大可能精度。- 参数
val- 函数参数。- 返回
- 自动生成
-
fastAtan2
public static float fastAtan2(float y, float x)以度为单位计算 2D 向量的角度。函数 fastAtan2 计算输入 2D 向量的全范围角度。角度以度为单位,范围从 0 到 360 度。精度约为 0.3 度。- 参数
x- 向量的 x 坐标。y- 向量的 y 坐标。- 返回
- 自动生成
-
useIPP
public static boolean useIPP()
hal::Cholesky 的代理- 返回
- 自动生成
-
setUseIPP
public static void setUseIPP(boolean flag)
-
getIppVersion
public static java.lang.String getIppVersion()
-
useIPP_NotExact
public static boolean useIPP_NotExact()
-
setUseIPP_NotExact
public static void setUseIPP_NotExact(boolean flag)
-
borderInterpolate
public static int borderInterpolate(int p, int len, int borderType)计算外推像素的源位置。该函数计算并在使用指定的外推边界模式时,返回与指定外推像素相对应的供体像素的坐标。例如,如果你在水平方向使用 cv::BORDER_WRAP 模式,在垂直方向使用 cv::BORDER_REFLECT_101,并想计算浮点图像 img 中“虚拟”像素 Point(-5, 100) 的值,代码如下:float val = img.at<float>(borderInterpolate(100, img.rows, cv::BORDER_REFLECT_101), borderInterpolate(-5, img.cols, cv::BORDER_WRAP));通常,该函数不会被直接调用。它在滤波函数内部以及 copyMakeBorder 中使用。- 参数
p- 外推像素沿其中一个轴的从 0 开始的坐标,通常 <0 或 >= lenlen- 沿相应轴的数组长度。borderType- 边界类型,#BorderTypes 之一,除了 #BORDER_TRANSPARENT 和 #BORDER_ISOLATED。当 borderType==#BORDER_CONSTANT 时,无论 p 和 len 如何,函数总是返回 -1。另请参阅:copyMakeBorder- 返回
- 自动生成
-
copyMakeBorder
public static void copyMakeBorder(Mat src, Mat dst, int top, int bottom, int left, int right, int borderType, Scalar value)
在图像周围形成边界。该函数将源图像复制到目标图像的中间。复制源图像的左侧、右侧、上方和下方区域将填充外推像素。这不是基于它的滤波函数所做的(它们即时外推像素),而是其他更复杂的函数(包括你自己的函数)可能为简化图像边界处理而做的。该函数支持 src 已经在 dst 中间的模式。在这种情况下,函数不复制 src 本身,而只是构造边界,例如:// 让各方向的边界相同 int border=2; // 构造一个更大的图像以容纳图像和边界 Mat gray_buf(rgb.rows + border*2, rgb.cols + border*2, rgb.depth()); // 选择它的中间部分而不复制数据 Mat gray(gray_canvas, Rect(border, border, rgb.cols, rgb.rows)); // 将图像从 RGB 转换为灰度 cvtColor(rgb, gray, COLOR_RGB2GRAY); // 就地形成边界 copyMakeBorder(gray, gray_buf, border, border, border, border, BORDER_REPLICATE); // 现在进行一些自定义滤波 ... ...注意: 当源图像是更大图像的一部分 (ROI) 时,函数将尝试使用 ROI 之外的像素来形成边界。要禁用此功能并始终进行外推(就好像 src 不是 ROI 一样),请使用 borderType | #BORDER_ISOLATED。- 参数
src- 源图像。dst- 与 src 类型相同、大小为 Size(src.cols+left+right, src.rows+top+bottom) 的目标图像。top- 顶部像素数bottom- 底部像素数left- 左侧像素数right- 参数指定从源图像矩形的每个方向向外推多少个像素。例如,top=1, bottom=1, left=1, right=1 意味着需要建立 1 像素宽的边界。borderType- 边界类型。详情请参阅 borderInterpolate。value- 如果 borderType==BORDER_CONSTANT 时的边界值。另请参阅:borderInterpolate
-
copyMakeBorder
public static void copyMakeBorder(Mat src, Mat dst, int top, int bottom, int left, int right, int borderType)
在图像周围形成边界。该函数将源图像复制到目标图像的中间。复制源图像的左侧、右侧、上方和下方区域将填充外推像素。这不是基于它的滤波函数所做的(它们即时外推像素),而是其他更复杂的函数(包括你自己的函数)可能为简化图像边界处理而做的。该函数支持 src 已经在 dst 中间的模式。在这种情况下,函数不复制 src 本身,而只是构造边界,例如:// 让各方向的边界相同 int border=2; // 构造一个更大的图像以容纳图像和边界 Mat gray_buf(rgb.rows + border*2, rgb.cols + border*2, rgb.depth()); // 选择它的中间部分而不复制数据 Mat gray(gray_canvas, Rect(border, border, rgb.cols, rgb.rows)); // 将图像从 RGB 转换为灰度 cvtColor(rgb, gray, COLOR_RGB2GRAY); // 就地形成边界 copyMakeBorder(gray, gray_buf, border, border, border, border, BORDER_REPLICATE); // 现在进行一些自定义滤波 ... ...注意: 当源图像是更大图像的一部分 (ROI) 时,函数将尝试使用 ROI 之外的像素来形成边界。要禁用此功能并始终进行外推(就好像 src 不是 ROI 一样),请使用 borderType | #BORDER_ISOLATED。- 参数
src- 源图像。dst- 与 src 类型相同、大小为 Size(src.cols+left+right, src.rows+top+bottom) 的目标图像。top- 顶部像素数bottom- 底部像素数left- 左侧像素数right- 参数指定从源图像矩形的每个方向向外推多少个像素。例如,top=1, bottom=1, left=1, right=1 意味着需要建立 1 像素宽的边界。borderType- 边界类型。详情请参阅 borderInterpolate。另请参阅:borderInterpolate
-
add
public static void add(Mat src1, Mat src2, Mat dst, Mat mask, int dtype)
计算两个数组或一个数组与一个标量的逐元素和。函数 add 计算- 当两个输入数组的大小和通道数都相同时,两个数组的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) + \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\)
- 当 src2 由 Scalar 构造或具有与
src1.channels()相同数量的元素时,一个数组与一个标量的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) + \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\) - 当 src1 由 Scalar 构造或具有与
src2.channels()相同数量的元素时,一个标量与一个数组的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1} + \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\),其中I是数组元素的多维索引。对于多通道数组,每个通道都是独立处理的。
dst = src1 + src2; dst += src1; // 相当于 add(dst, src1, dst);输入数组和输出数组可以具有相同或不同的深度。例如,您可以将 16 位无符号数组加到 8 位有符号数组,并将和存储为 32 位浮点数组。输出数组的深度由 dtype 参数决定。在上述第二种和第三种情况以及第一种情况(当 src1.depth() == src2.depth() 时),dtype 可以设置为默认值 -1。在这种情况下,输出数组将具有与输入数组(src1、src2 或两者)相同的深度。 注意: 当输出数组深度为 CV_32S 时,不应用饱和(Saturation)。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。add(src,X)意味着add(src,(X,X,X,X))。add(src,(X,))意味着add(src,(X,0,0,0))。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 输出数组,其大小和通道数与输入数组相同;深度由 dtype 或 src1/src2 定义。mask- 可选的操作掩码 - 8 位单通道数组,指定要更改的输出数组元素。dtype- 可选的输出数组深度(见下文讨论)。另请参阅:subtract, addWeighted, scaleAdd, Mat::convertTo
-
add
public static void add(Mat src1, Mat src2, Mat dst, Mat mask)
计算两个数组或一个数组与一个标量的逐元素和。函数 add 计算- 当两个输入数组的大小和通道数都相同时,两个数组的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) + \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\)
- 当 src2 由 Scalar 构造或具有与
src1.channels()相同数量的元素时,一个数组与一个标量的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) + \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\) - 当 src1 由 Scalar 构造或具有与
src2.channels()相同数量的元素时,一个标量与一个数组的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1} + \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\),其中I是数组元素的多维索引。对于多通道数组,每个通道都是独立处理的。
dst = src1 + src2; dst += src1; // 相当于 add(dst, src1, dst);输入数组和输出数组可以具有相同或不同的深度。例如,您可以将 16 位无符号数组加到 8 位有符号数组,并将和存储为 32 位浮点数组。输出数组的深度由 dtype 参数决定。在上述第二种和第三种情况以及第一种情况(当 src1.depth() == src2.depth() 时),dtype 可以设置为默认值 -1。在这种情况下,输出数组将具有与输入数组(src1、src2 或两者)相同的深度。 注意: 当输出数组深度为 CV_32S 时,不应用饱和(Saturation)。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。add(src,X)意味着add(src,(X,X,X,X))。add(src,(X,))意味着add(src,(X,0,0,0))。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 输出数组,其大小和通道数与输入数组相同;深度由 dtype 或 src1/src2 定义。mask- 可选的操作掩码 - 8 位单通道数组,指定要更改的输出数组元素。另请参阅:subtract, addWeighted, scaleAdd, Mat::convertTo
-
add
public static void add(Mat src1, Mat src2, Mat dst)
计算两个数组或一个数组与一个标量的逐元素和。函数 add 计算- 当两个输入数组的大小和通道数都相同时,两个数组的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) + \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\)
- 当 src2 由 Scalar 构造或具有与
src1.channels()相同数量的元素时,一个数组与一个标量的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) + \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\) - 当 src1 由 Scalar 构造或具有与
src2.channels()相同数量的元素时,一个标量与一个数组的和:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1} + \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\),其中I是数组元素的多维索引。对于多通道数组,每个通道都是独立处理的。
dst = src1 + src2; dst += src1; // 相当于 add(dst, src1, dst);输入数组和输出数组可以具有相同或不同的深度。例如,您可以将 16 位无符号数组加到 8 位有符号数组,并将和存储为 32 位浮点数组。输出数组的深度由 dtype 参数决定。在上述第二种和第三种情况以及第一种情况(当 src1.depth() == src2.depth() 时),dtype 可以设置为默认值 -1。在这种情况下,输出数组将具有与输入数组(src1、src2 或两者)相同的深度。 注意: 当输出数组深度为 CV_32S 时,不应用饱和(Saturation)。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。add(src,X)意味着add(src,(X,X,X,X))。add(src,(X,))意味着add(src,(X,0,0,0))。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 输出数组,其大小和通道数与输入数组相同;深度由 dtype 或 src1/src2 定义。要更改的输出数组。另请参阅:subtract, addWeighted, scaleAdd, Mat::convertTo
-
subtract
public static void subtract(Mat src1, Mat src2, Mat dst, Mat mask, int dtype)
计算两个数组或一个数组与一个标量的逐元素差。函数 subtract 计算- 当两个输入数组具有相同大小和相同通道数时,两个数组之间的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) - \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\)
- 当 src2 由 Scalar 构造或具有与
src1.channels()相同数量的元素时,一个数组与一个标量的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) - \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\) - 当 src1 由 Scalar 构造或具有与
src2.channels()相同数量的元素时,一个标量与一个数组的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1} - \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\) - 在
SubRS情况下,标量与数组的反向差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src2} - \texttt{src1}(I) ) \quad \texttt{if mask}(I) \ne0\),其中 I 是数组元素的多维索引。对于多通道数组,每个通道都是独立处理的。
dst = src1 - src2; dst -= src1; // 相当于 subtract(dst, src1, dst);输入数组和输出数组可以具有相同或不同的深度。例如,您可以减去 8 位无符号数组,并将差存储在 16 位有符号数组中。输出数组的深度由 dtype 参数决定。在上述第二种和第三种情况以及第一种情况(当 src1.depth() == src2.depth() 时),dtype 可以设置为默认值 -1。在这种情况下,输出数组将具有与输入数组(src1、src2 或两者)相同的深度。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。subtract(src,X)意味着subtract(src,(X,X,X,X))。subtract(src,(X,))意味着subtract(src,(X,0,0,0))。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组大小和通道数相同的输出数组。mask- 可选的操作掩码;这是一个 8 位单通道数组,指定要更改的输出数组元素。dtype- 可选的输出数组深度。另请参阅:add, addWeighted, scaleAdd, Mat::convertTo
-
subtract
public static void subtract(Mat src1, Mat src2, Mat dst, Mat mask)
计算两个数组或一个数组与一个标量的逐元素差。函数 subtract 计算- 当两个输入数组具有相同大小和相同通道数时,两个数组之间的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) - \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\)
- 当 src2 由 Scalar 构造或具有与
src1.channels()相同数量的元素时,一个数组与一个标量的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) - \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\) - 当 src1 由 Scalar 构造或具有与
src2.channels()相同数量的元素时,一个标量与一个数组的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1} - \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\) - 在
SubRS情况下,标量与数组的反向差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src2} - \texttt{src1}(I) ) \quad \texttt{if mask}(I) \ne0\),其中 I 是数组元素的多维索引。对于多通道数组,每个通道都是独立处理的。
dst = src1 - src2; dst -= src1; // 相当于 subtract(dst, src1, dst);输入数组和输出数组可以具有相同或不同的深度。例如,您可以减去 8 位无符号数组,并将差存储在 16 位有符号数组中。输出数组的深度由 dtype 参数决定。在上述第二种和第三种情况以及第一种情况(当 src1.depth() == src2.depth() 时),dtype 可以设置为默认值 -1。在这种情况下,输出数组将具有与输入数组(src1、src2 或两者)相同的深度。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。subtract(src,X)意味着subtract(src,(X,X,X,X))。subtract(src,(X,))意味着subtract(src,(X,0,0,0))。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组大小和通道数相同的输出数组。mask- 可选的操作掩码;这是一个 8 位单通道数组,指定要更改的输出数组元素。另请参阅:add, addWeighted, scaleAdd, Mat::convertTo
-
subtract
public static void subtract(Mat src1, Mat src2, Mat dst)
计算两个数组或一个数组与一个标量的逐元素差。函数 subtract 计算- 当两个输入数组具有相同大小和相同通道数时,两个数组之间的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) - \texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\)
- 当 src2 由 Scalar 构造或具有与
src1.channels()相同数量的元素时,一个数组与一个标量的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) - \texttt{src2} ) \quad \texttt{if mask}(I) \ne0\) - 当 src1 由 Scalar 构造或具有与
src2.channels()相同数量的元素时,一个标量与一个数组的差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1} - \texttt{src2}(I) ) \quad \texttt{if mask}(I) \ne0\) - 在
SubRS情况下,标量与数组的反向差:\(\texttt{dst}(I) = \texttt{saturate} ( \texttt{src2} - \texttt{src1}(I) ) \quad \texttt{if mask}(I) \ne0\),其中 I 是数组元素的多维索引。对于多通道数组,每个通道都是独立处理的。
dst = src1 - src2; dst -= src1; // 相当于 subtract(dst, src1, dst);输入数组和输出数组可以具有相同或不同的深度。例如,您可以减去 8 位无符号数组,并将差存储在 16 位有符号数组中。输出数组的深度由 dtype 参数决定。在上述第二种和第三种情况以及第一种情况(当 src1.depth() == src2.depth() 时),dtype 可以设置为默认值 -1。在这种情况下,输出数组将具有与输入数组(src1、src2 或两者)相同的深度。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。subtract(src,X)意味着subtract(src,(X,X,X,X))。subtract(src,(X,))意味着subtract(src,(X,0,0,0))。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组大小和通道数相同的输出数组。要更改的输出数组。另请参阅:add, addWeighted, scaleAdd, Mat::convertTo
-
multiply
public static void multiply(Mat src1, Mat src2, Mat dst, double scale, int dtype)
计算两个数组的逐元素缩放乘积。函数 multiply 计算两个数组的逐元素乘积:\(\texttt{dst} (I)= \texttt{saturate} ( \texttt{scale} \cdot \texttt{src1} (I) \cdot \texttt{src2} (I))\)。此外还有一种对 REF: MatrixExpressions 友好的变体。参见 Mat::mul。对于非逐元素的矩阵乘积,请参阅 gemm。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。multiply(src,X)意味着multiply(src,(X,X,X,X))。multiply(src,(X,))意味着multiply(src,(X,0,0,0))。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。dst- 与 src1 大小和类型相同的输出数组。scale- 可选的缩放因子。dtype- 可选的输出数组深度。另请参阅:add, subtract, divide, scaleAdd, addWeighted, accumulate, accumulateProduct, accumulateSquare, Mat::convertTo
-
multiply
public static void multiply(Mat src1, Mat src2, Mat dst, double scale)
计算两个数组的逐元素缩放乘积。函数 multiply 计算两个数组的逐元素乘积:\(\texttt{dst} (I)= \texttt{saturate} ( \texttt{scale} \cdot \texttt{src1} (I) \cdot \texttt{src2} (I))\)。此外还有一种对 REF: MatrixExpressions 友好的变体。参见 Mat::mul。对于非逐元素的矩阵乘积,请参阅 gemm。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。multiply(src,X)意味着multiply(src,(X,X,X,X))。multiply(src,(X,))意味着multiply(src,(X,0,0,0))。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。dst- 与 src1 大小和类型相同的输出数组。scale- 可选的缩放因子。另请参阅:add, subtract, divide, scaleAdd, addWeighted, accumulate, accumulateProduct, accumulateSquare, Mat::convertTo
-
multiply
public static void multiply(Mat src1, Mat src2, Mat dst)
计算两个数组的逐元素缩放乘积。函数 multiply 计算两个数组的逐元素乘积:\(\texttt{dst} (I)= \texttt{saturate} ( \texttt{scale} \cdot \texttt{src1} (I) \cdot \texttt{src2} (I))\)。此外还有一种对 REF: MatrixExpressions 友好的变体。参见 Mat::mul。对于非逐元素的矩阵乘积,请参阅 gemm。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。multiply(src,X)意味着multiply(src,(X,X,X,X))。multiply(src,(X,))意味着multiply(src,(X,0,0,0))。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。dst- 与 src1 大小和类型相同的输出数组。另请参阅:add, subtract, divide, scaleAdd, addWeighted, accumulate, accumulateProduct, accumulateSquare, Mat::convertTo
-
divide
public static void divide(Mat src1, Mat src2, Mat dst, double scale, int dtype)
执行两个数组的逐元素除法,或一个标量除以一个数组。函数 cv::divide 将一个数组除以另一个数组:\(\texttt{dst(I) = saturate(src1(I)*scale/src2(I))}\);或者在没有 src1 时,用一个标量除以一个数组:\(\texttt{dst(I) = saturate(scale/src2(I))}\)。多通道数组的不同通道是独立处理的。对于整数类型,当 src2(I) 为零时,dst(I) 也将为零。 注意: 对于浮点数据,对于 src2(I) 值为零的情况没有特殊定义的行为。使用常规的浮点除法。对于浮点数据(带有 NaN, Inf 结果值),预期符合 IEEE-754 标准的行为。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。divide(src,X)意味着divide(src,(X,X,X,X))。divide(src,(X,))意味着divide(src,(X,0,0,0))。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。scale- 标量因子。dst- 与 src2 大小和类型相同的输出数组。dtype- 可选的输出数组深度;如果是 -1,则 dst 将具有深度 src2.depth(),但在数组除以数组的情况下,只有在 src1.depth()==src2.depth() 时才能传递 -1。另请参阅:multiply, add, subtract
-
divide
public static void divide(Mat src1, Mat src2, Mat dst, double scale)
执行两个数组的逐元素除法,或一个标量除以一个数组。函数 cv::divide 将一个数组除以另一个数组:\(\texttt{dst(I) = saturate(src1(I)*scale/src2(I))}\);或者在没有 src1 时,用一个标量除以一个数组:\(\texttt{dst(I) = saturate(scale/src2(I))}\)。多通道数组的不同通道是独立处理的。对于整数类型,当 src2(I) 为零时,dst(I) 也将为零。 注意: 对于浮点数据,对于 src2(I) 值为零的情况没有特殊定义的行为。使用常规的浮点除法。对于浮点数据(带有 NaN, Inf 结果值),预期符合 IEEE-754 标准的行为。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。divide(src,X)意味着divide(src,(X,X,X,X))。divide(src,(X,))意味着divide(src,(X,0,0,0))。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。scale- 标量因子。dst- 与 src2 大小和类型相同的输出数组。在数组除以数组的情况下,只有在 src1.depth()==src2.depth() 时才能传递 -1。另请参阅:multiply, add, subtract
-
divide
public static void divide(Mat src1, Mat src2, Mat dst)
执行两个数组的逐元素除法,或一个标量除以一个数组。函数 cv::divide 将一个数组除以另一个数组:\(\texttt{dst(I) = saturate(src1(I)*scale/src2(I))}\);或者在没有 src1 时,用一个标量除以一个数组:\(\texttt{dst(I) = saturate(scale/src2(I))}\)。多通道数组的不同通道是独立处理的。对于整数类型,当 src2(I) 为零时,dst(I) 也将为零。 注意: 对于浮点数据,对于 src2(I) 值为零的情况没有特殊定义的行为。使用常规的浮点除法。对于浮点数据(带有 NaN, Inf 结果值),预期符合 IEEE-754 标准的行为。 注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。 注意: (Python) 注意 src1/src2 是单个数值与它们是元组/数组时行为的区别。divide(src,X)意味着divide(src,(X,X,X,X))。divide(src,(X,))意味着divide(src,(X,0,0,0))。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。dst- 与 src2 大小和类型相同的输出数组。在数组除以数组的情况下,只有在 src1.depth()==src2.depth() 时才能传递 -1。另请参阅:multiply, add, subtract
-
scaleAdd
public static void scaleAdd(Mat src1, double alpha, Mat src2, Mat dst)
计算一个缩放数组与另一个数组的和。函数 scaleAdd 是经典的基本线性代数运算之一,在 [BLAS](http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) 中被称为 DAXPY 或 SAXPY。它计算一个缩放数组与另一个数组的和:\(\texttt{dst} (I)= \texttt{scale} \cdot \texttt{src1} (I) + \texttt{src2} (I)\)。该函数也可以通过矩阵表达式模拟,例如:Mat A(3, 3, CV_64F); ... A.row(0) = A.row(1)*2 + A.row(2);- 参数
src1- 第一个输入数组。alpha- 第一个数组的缩放因子。src2- 与 src1 大小和类型相同的第二个输入数组。dst- 与 src1 大小和类型相同的输出数组。另请参阅:add, addWeighted, subtract, Mat::dot, Mat::convertTo
-
addWeighted
public static void addWeighted(Mat src1, double alpha, Mat src2, double beta, double gamma, Mat dst, int dtype)
计算两个数组的加权和。函数 addWeighted 计算两个数组的加权和如下:\(\texttt{dst} (I)= \texttt{saturate} ( \texttt{src1} (I)* \texttt{alpha} + \texttt{src2} (I)* \texttt{beta} + \texttt{gamma} )\),其中 I 是数组元素的多维索引。对于多通道数组,每个通道都是独立处理的。该函数可以用矩阵表达式替换:dst = src1*alpha + src2*beta + gamma;注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。- 参数
src1- 第一个输入数组。alpha- 第一个数组元素的权重。src2- 与 src1 大小和通道数相同的第二个输入数组。beta- 第二个数组元素的权重。gamma- 加到每个和上的标量。dst- 与输入数组具有相同大小和通道数的输出数组。dtype- 可选的输出数组深度;当两个输入数组深度相同时,dtype 可以设置为 -1,这相当于 src1.depth()。另请参阅:add, subtract, scaleAdd, Mat::convertTo
-
addWeighted
public static void addWeighted(Mat src1, double alpha, Mat src2, double beta, double gamma, Mat dst)
计算两个数组的加权和。函数 addWeighted 计算两个数组的加权和如下:\(\texttt{dst} (I)= \texttt{saturate} ( \texttt{src1} (I)* \texttt{alpha} + \texttt{src2} (I)* \texttt{beta} + \texttt{gamma} )\),其中 I 是数组元素的多维索引。对于多通道数组,每个通道都是独立处理的。该函数可以用矩阵表达式替换:dst = src1*alpha + src2*beta + gamma;注意: 当输出数组深度为 CV_32S 时,不应用饱和。在溢出的情况下,您甚至可能会得到符号错误的结果。- 参数
src1- 第一个输入数组。alpha- 第一个数组元素的权重。src2- 与 src1 大小和通道数相同的第二个输入数组。beta- 第二个数组元素的权重。gamma- 加到每个和上的标量。dst- 与输入数组具有相同大小和通道数的输出数组。可以设置为 -1,这相当于 src1.depth()。另请参阅:add, subtract, scaleAdd, Mat::convertTo
-
convertScaleAbs
public static void convertScaleAbs(Mat src, Mat dst, double alpha, double beta)
缩放、计算绝对值,并将结果转换为 8 位。该函数 convertScaleAbs 对输入数组的每个元素依次执行三个操作:缩放、取绝对值、转换为无符号 8 位类型:\(\texttt{dst} (I)= \texttt{saturate\_cast<uchar>} (| \texttt{src} (I)* \texttt{alpha} + \texttt{beta} |)\) 如果是多通道数组,该函数将独立处理每个通道。当输出不是 8 位时,可以通过调用 Mat::convertTo 方法(或使用矩阵表达式)然后计算结果的绝对值来模拟此操作。例如:Mat_<float> A(30,30); randu(A, Scalar(-100), Scalar(100)); Mat_<float> B = A*5 + 3; B = abs(B); // Mat_<float> B = abs(A*5+3) 也可以完成任务,// 但它会分配一个临时矩阵- 参数
src- 输入数组。dst- 输出数组。alpha- 可选的缩放因子。beta- 加在缩放后的值上的可选偏移量。 参阅:Mat::convertTo, cv::abs(const Mat&)
-
convertScaleAbs
public static void convertScaleAbs(Mat src, Mat dst, double alpha)
缩放、计算绝对值,并将结果转换为 8 位。该函数 convertScaleAbs 对输入数组的每个元素依次执行三个操作:缩放、取绝对值、转换为无符号 8 位类型:\(\texttt{dst} (I)= \texttt{saturate\_cast<uchar>} (| \texttt{src} (I)* \texttt{alpha} + \texttt{beta} |)\) 如果是多通道数组,该函数将独立处理每个通道。当输出不是 8 位时,可以通过调用 Mat::convertTo 方法(或使用矩阵表达式)然后计算结果的绝对值来模拟此操作。例如:Mat_<float> A(30,30); randu(A, Scalar(-100), Scalar(100)); Mat_<float> B = A*5 + 3; B = abs(B); // Mat_<float> B = abs(A*5+3) 也可以完成任务,// 但它会分配一个临时矩阵- 参数
src- 输入数组。dst- 输出数组。alpha- 可选的缩放因子。 参阅:Mat::convertTo, cv::abs(const Mat&)
-
convertScaleAbs
public static void convertScaleAbs(Mat src, Mat dst)
缩放、计算绝对值,并将结果转换为 8 位。该函数 convertScaleAbs 对输入数组的每个元素依次执行三个操作:缩放、取绝对值、转换为无符号 8 位类型:\(\texttt{dst} (I)= \texttt{saturate\_cast<uchar>} (| \texttt{src} (I)* \texttt{alpha} + \texttt{beta} |)\) 如果是多通道数组,该函数将独立处理每个通道。当输出不是 8 位时,可以通过调用 Mat::convertTo 方法(或使用矩阵表达式)然后计算结果的绝对值来模拟此操作。例如:Mat_<float> A(30,30); randu(A, Scalar(-100), Scalar(100)); Mat_<float> B = A*5 + 3; B = abs(B); // Mat_<float> B = abs(A*5+3) 也可以完成任务,// 但它会分配一个临时矩阵- 参数
src- 输入数组。dst- 输出数组。 参阅:Mat::convertTo, cv::abs(const Mat&)
-
convertFp16
@Deprecated public static void convertFp16(Mat src, Mat dst)
已弃用。请改用 Mat::convertTo 并配合 CV_16F 使用。将数组转换为半精度浮点数。该函数在 FP32(单精度浮点数)与 FP16(半精度浮点数)之间进行转换。CV_16S 格式被用于表示 FP16 数据。有两种使用模式 (src -> dst):CV_32F -> CV_16S 和 CV_16S -> CV_32F。输入数组的类型必须是 CV_32F 或 CV_16S 以代表位深。如果输入数组不属于这两种类型,函数将报错。半精度浮点数的格式定义在 IEEE 754-2008 标准中。- 参数
src- 输入数组。dst- 输出数组。
-
LUT
public static void LUT(Mat src, Mat lut, Mat dst)
执行数组的查找表转换。LUT 函数用查找表中的值填充输出数组。条目的索引取自输入数组。也就是说,函数按如下方式处理 src 的每个元素:\(\texttt{dst} (I) \leftarrow \texttt{lut(src(I) + d)}\) 其中 \(d = \forkthree{0}{如果 \(\texttt{src}\) 的深度为 \(\texttt{CV_8U}\) 或 \(\texttt{CV_16U}\)}{128}{如果 \(\texttt{src}\) 的深度为 \(\texttt{CV_8S}\)}{32768}{如果 \(\texttt{src}\) 的深度为 \(\texttt{CV_16S}\)}\)- 参数
src- 由 8 位或 16 位整数元素组成的输入数组。lut- 包含 256 个元素的查找表(如果 src 深度为 CV_8U 或 CV_8S)或 65536 个元素的查找表(如果 src 深度为 CV_16U 或 CV_16S);在多通道输入数组的情况下,该表应为单通道(此时所有通道使用相同的表)或具有与输入数组相同的通道数。dst- 与 src 具有相同大小和通道数,且与 lut 具有相同深度的输出数组。 参阅:convertScaleAbs, Mat::convertTo
-
sumElems
public static Scalar sumElems(Mat src)
计算数组元素的总和。cv::sum 函数为每个通道独立计算并返回数组元素的总和。- 参数
src- 必须具有 1 到 4 个通道的输入数组。 参阅:countNonZero, mean, meanStdDev, norm, minMaxLoc, reduce- 返回
- 自动生成
-
hasNonZero
public static boolean hasNonZero(Mat src)
检查是否存在至少一个非零数组元素。该函数返回 src 中是否存在非零元素。该函数不支持多通道数组。如果您需要检查所有通道中的非零数组元素,请先使用 Mat::reshape 将数组重新解释为单通道,或者您可以使用 extractImageCOI、mixChannels 或 split 提取特定通道。注意:- 如果非零数组元素的位置很重要,参考:findNonZero 会很有帮助。
- 如果非零数组元素的计数很重要,参考:countNonZero 会很有帮助。
- 参数
src- 单通道数组。 参阅:mean, meanStdDev, norm, minMaxLoc, calcCovarMatrix。 参阅:findNonZero, countNonZero- 返回
- 自动生成
-
countNonZero
public static int countNonZero(Mat src)
统计非零数组元素。该函数返回 src 中非零元素的数量:\(\sum _{I: \; \texttt{src} (I) \ne0 } 1\)。该函数不支持多通道数组。如果您需要统计所有通道中的非零数组元素,请先使用 Mat::reshape 将数组重新解释为单通道,或者您可以使用 extractImageCOI、mixChannels 或 split 提取特定通道。注意:- 如果只有是否存在非零元素很重要,参考:hasNonZero 会很有帮助。
- 如果非零数组元素的位置很重要,参考:findNonZero 会很有帮助。
- 参数
src- 单通道数组。 参阅:mean, meanStdDev, norm, minMaxLoc, calcCovarMatrix。 参阅:findNonZero, hasNonZero- 返回
- 自动生成
-
findNonZero
public static void findNonZero(Mat src, Mat idx)
返回非零像素的位置列表。给定一个二值矩阵(通常由 threshold()、compare()、>、== 等操作返回),将所有非零索引作为 cv::Mat 或 std::vector<cv::Point> (x,y) 返回。例如:cv::Mat binaryImage; // 输入,二值图像 cv::Mat locations; // 输出,非零像素的位置 cv::findNonZero(binaryImage, locations); // 访问像素坐标 Point pnt = locations.at<Point>(i);或cv::Mat binaryImage; // 输入,二值图像 vector<Point> locations; // 输出,非零像素的位置 cv::findNonZero(binaryImage, locations); // 访问像素坐标 Point pnt = locations[i];该函数不支持多通道数组。如果您需要查找所有通道中的非零元素,请先使用 Mat::reshape 将数组重新解释为单通道,或者您可以使用 extractImageCOI、mixChannels 或 split 提取特定通道。注意:- 如果只有非零数组元素的计数很重要,参考:countNonZero 会很有帮助。
- 如果只有是否存在非零元素很重要,参考:hasNonZero 会很有帮助。
- 参数
src- 单通道数组idx- 输出数组,类型为 cv::Mat 或 std::vector<Point>,对应输入中的非零索引。 参阅:countNonZero, hasNonZero
-
mean
public static Scalar mean(Mat src, Mat mask)
计算数组元素的平均值。cv::mean 函数为每个通道独立计算数组元素的平均值 M,并将其返回:\(\begin{array}{l} N = \sum _{I: \; \texttt{mask} (I) \ne 0} 1 \\ M_c = \left ( \sum _{I: \; \texttt{mask} (I) \ne 0}{ \texttt{mtx} (I)_c} \right )/N \end{array}\) 当所有掩码元素都为 0 时,函数返回 Scalar::all(0)- 参数
src- 输入数组,应具有 1 到 4 个通道,以便结果可以存储在 Scalar_ 中。mask- 可选的操作掩码。 参阅:countNonZero, meanStdDev, norm, minMaxLoc- 返回
- 自动生成
-
mean
public static Scalar mean(Mat src)
计算数组元素的平均值。cv::mean 函数为每个通道独立计算数组元素的平均值 M,并将其返回:\(\begin{array}{l} N = \sum _{I: \; \texttt{mask} (I) \ne 0} 1 \\ M_c = \left ( \sum _{I: \; \texttt{mask} (I) \ne 0}{ \texttt{mtx} (I)_c} \right )/N \end{array}\) 当所有掩码元素都为 0 时,函数返回 Scalar::all(0)- 参数
src- 输入数组,应具有 1 到 4 个通道,以便结果可以存储在 Scalar_ 中。 参阅:countNonZero, meanStdDev, norm, minMaxLoc- 返回
- 自动生成
-
meanStdDev
public static void meanStdDev(Mat src, MatOfDouble mean, MatOfDouble stddev, Mat mask)
计算数组元素的平均值和标准差。cv::meanStdDev 函数为每个通道独立计算数组元素的平均值和标准差 M,并通过输出参数返回:\(\begin{array}{l} N = \sum _{I, \texttt{mask} (I) \ne 0} 1 \\ \texttt{mean} _c = \frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \texttt{src} (I)_c}{N} \\ \texttt{stddev} _c = \sqrt{\frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \left ( \texttt{src} (I)_c - \texttt{mean} _c \right )^2}{N}} \end{array}\) 当所有掩码元素都为 0 时,该函数返回 mean=stddev=Scalar::all(0)。注意: 计算出的标准差仅是完整归一化协方差矩阵的对角线。如果需要全矩阵,您可以将多通道数组 M x N 重塑为单通道数组 M*N x mtx.channels()(仅当矩阵连续时可行),然后将矩阵传递给 calcCovarMatrix。- 参数
src- 输入数组,应具有 1 到 4 个通道,以便结果可以存储在 Scalar_ 中。mean- 输出参数:计算出的平均值。stddev- 输出参数:计算出的标准差。mask- 可选的操作掩码。 参阅:countNonZero, mean, norm, minMaxLoc, calcCovarMatrix
-
meanStdDev
public static void meanStdDev(Mat src, MatOfDouble mean, MatOfDouble stddev)
计算数组元素的平均值和标准差。cv::meanStdDev 函数为每个通道独立计算数组元素的平均值和标准差 M,并通过输出参数返回:\(\begin{array}{l} N = \sum _{I, \texttt{mask} (I) \ne 0} 1 \\ \texttt{mean} _c = \frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \texttt{src} (I)_c}{N} \\ \texttt{stddev} _c = \sqrt{\frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \left ( \texttt{src} (I)_c - \texttt{mean} _c \right )^2}{N}} \end{array}\) 当所有掩码元素都为 0 时,该函数返回 mean=stddev=Scalar::all(0)。注意: 计算出的标准差仅是完整归一化协方差矩阵的对角线。如果需要全矩阵,您可以将多通道数组 M x N 重塑为单通道数组 M*N x mtx.channels()(仅当矩阵连续时可行),然后将矩阵传递给 calcCovarMatrix。- 参数
src- 输入数组,应具有 1 到 4 个通道,以便结果可以存储在 Scalar_ 中。mean- 输出参数:计算出的平均值。stddev- 输出参数:计算出的标准差。 参阅:countNonZero, mean, norm, minMaxLoc, calcCovarMatrix
-
norm
public static double norm(Mat src1, int normType, Mat mask)
计算数组的绝对范数。此版本的 #norm 计算 src1 的绝对范数。计算的范数类型使用 #NormTypes 指定。例如对于单个数组,考虑函数 \(r(x)= \begin{pmatrix} x \\ 1-x \end{pmatrix}, x \in [-1;1]\)。样本值 \(r(-1) = \begin{pmatrix} -1 \\ 2 \end{pmatrix}\) 的 \( L_{1}, L_{2} \) 和 \( L_{\infty} \) 范数计算如下 \(align*} \| r(-1) \|_{L_1} &= |-1| + |2| = 3 \\ \| r(-1) \|_{L_2} &= \sqrt{(-1)^{2} + (2)^{2}} = \sqrt{5} \\ \| r(-1) \|_{L_\infty} &= \max(|-1|,|2|) = 2 \) 对于 \(r(0.5) = \begin{pmatrix} 0.5 \\ 0.5 \end{pmatrix}\),计算结果为 \(align*} \| r(0.5) \|_{L_1} &= |0.5| + |0.5| = 1 \\ \| r(0.5) \|_{L_2} &= \sqrt{(0.5)^{2} + (0.5)^{2}} = \sqrt{0.5} \\ \| r(0.5) \|_{L_\infty} &= \max(|0.5|,|0.5|) = 0.5. \) 下图显示了三个范数函数 \(\| r(x) \|_{L_1}, \| r(x) \|_{L_2}\) 和 \(\| r(x) \|_{L_\infty}\) 的所有值。值得注意的是,对于示例函数 \( r(x) \),\( L_{1} \) 范数构成了上限,而 \( L_{\infty} \) 范数构成了下限。 当指定了掩码参数且不为空时,范数仅在掩码指定的区域内计算。如果未指定 normType,则使用 #NORM_L2。多通道输入数组被视为单通道数组,即所有通道的结果被合并。汉明范数(Hamming norms)只能使用 CV_8U 深度的数组进行计算。- 参数
src1- 第一个输入数组。normType- 范数类型(参见 #NormTypes)。mask- 可选的操作掩码;它必须与 src1 具有相同的大小,且类型为 CV_8UC1。- 返回
- 自动生成
-
norm
public static double norm(Mat src1, int normType)
计算数组的绝对范数。此版本的 #norm 计算 src1 的绝对范数。计算的范数类型使用 #NormTypes 指定。例如对于单个数组,考虑函数 \(r(x)= \begin{pmatrix} x \\ 1-x \end{pmatrix}, x \in [-1;1]\)。样本值 \(r(-1) = \begin{pmatrix} -1 \\ 2 \end{pmatrix}\) 的 \( L_{1}, L_{2} \) 和 \( L_{\infty} \) 范数计算如下 \(align*} \| r(-1) \|_{L_1} &= |-1| + |2| = 3 \\ \| r(-1) \|_{L_2} &= \sqrt{(-1)^{2} + (2)^{2}} = \sqrt{5} \\ \| r(-1) \|_{L_\infty} &= \max(|-1|,|2|) = 2 \) 对于 \(r(0.5) = \begin{pmatrix} 0.5 \\ 0.5 \end{pmatrix}\),计算结果为 \(align*} \| r(0.5) \|_{L_1} &= |0.5| + |0.5| = 1 \\ \| r(0.5) \|_{L_2} &= \sqrt{(0.5)^{2} + (0.5)^{2}} = \sqrt{0.5} \\ \| r(0.5) \|_{L_\infty} &= \max(|0.5|,|0.5|) = 0.5. \) 下图显示了三个范数函数 \(\| r(x) \|_{L_1}, \| r(x) \|_{L_2}\) 和 \(\| r(x) \|_{L_\infty}\) 的所有值。值得注意的是,对于示例函数 \( r(x) \),\( L_{1} \) 范数构成了上限,而 \( L_{\infty} \) 范数构成了下限。 当指定了掩码参数且不为空时,范数仅在掩码指定的区域内计算。如果未指定 normType,则使用 #NORM_L2。多通道输入数组被视为单通道数组,即所有通道的结果被合并。汉明范数(Hamming norms)只能使用 CV_8U 深度的数组进行计算。- 参数
src1- 第一个输入数组。normType- 范数类型(参见 #NormTypes)。- 返回
- 自动生成
-
norm
public static double norm(Mat src1)
计算数组的绝对范数。此版本的 #norm 计算 src1 的绝对范数。计算的范数类型使用 #NormTypes 指定。例如对于单个数组,考虑函数 \(r(x)= \begin{pmatrix} x \\ 1-x \end{pmatrix}, x \in [-1;1]\)。样本值 \(r(-1) = \begin{pmatrix} -1 \\ 2 \end{pmatrix}\) 的 \( L_{1}, L_{2} \) 和 \( L_{\infty} \) 范数计算如下 \(align*} \| r(-1) \|_{L_1} &= |-1| + |2| = 3 \\ \| r(-1) \|_{L_2} &= \sqrt{(-1)^{2} + (2)^{2}} = \sqrt{5} \\ \| r(-1) \|_{L_\infty} &= \max(|-1|,|2|) = 2 \) 对于 \(r(0.5) = \begin{pmatrix} 0.5 \\ 0.5 \end{pmatrix}\),计算结果为 \(align*} \| r(0.5) \|_{L_1} &= |0.5| + |0.5| = 1 \\ \| r(0.5) \|_{L_2} &= \sqrt{(0.5)^{2} + (0.5)^{2}} = \sqrt{0.5} \\ \| r(0.5) \|_{L_\infty} &= \max(|0.5|,|0.5|) = 0.5. \) 下图显示了三个范数函数 \(\| r(x) \|_{L_1}, \| r(x) \|_{L_2}\) 和 \(\| r(x) \|_{L_\infty}\) 的所有值。值得注意的是,对于示例函数 \( r(x) \),\( L_{1} \) 范数构成了上限,而 \( L_{\infty} \) 范数构成了下限。 当指定了掩码参数且不为空时,范数仅在掩码指定的区域内计算。如果未指定 normType,则使用 #NORM_L2。多通道输入数组被视为单通道数组,即所有通道的结果被合并。汉明范数(Hamming norms)只能使用 CV_8U 深度的数组进行计算。- 参数
src1- 第一个输入数组。- 返回
- 自动生成
-
norm
public static double norm(Mat src1, Mat src2, int normType, Mat mask)
计算绝对差范数或相对差范数。此版本的 cv::norm 计算数组 src1 和 src2 的绝对差范数或相对差范数。计算的范数类型使用 #NormTypes 指定。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。normType- 范数类型(参见 #NormTypes)。mask- 可选的操作掩码;它必须与 src1 具有相同的大小,且类型为 CV_8UC1。- 返回
- 自动生成
-
norm
public static double norm(Mat src1, Mat src2, int normType)
计算绝对差范数或相对差范数。此版本的 cv::norm 计算数组 src1 和 src2 的绝对差范数或相对差范数。计算的范数类型使用 #NormTypes 指定。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。normType- 范数类型(参见 #NormTypes)。- 返回
- 自动生成
-
norm
public static double norm(Mat src1, Mat src2)
计算绝对差范数或相对差范数。此版本的 cv::norm 计算数组 src1 和 src2 的绝对差范数或相对差范数。计算的范数类型使用 #NormTypes 指定。- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。- 返回
- 自动生成
-
PSNR
public static double PSNR(Mat src1, Mat src2, double R)
计算峰值信噪比(PSNR)图像质量指标。该函数计算两个输入数组 src1 和 src2 之间的峰值信噪比(PSNR)图像质量指标,单位为分贝(dB)。数组必须具有相同的类型。PSNR 的计算方式如下:\( \texttt{PSNR} = 10 \cdot \log_{10}{\left( \frac{R^2}{MSE} \right) } \) 其中 R 是深度的最大整数值(例如在 CV_8U 数据的情况下为 255),MSE 是两个数组之间的均方误差。- 参数
src1- 第一个输入数组。src2- 与 src1 大小相同的第二个输入数组。R- 最大像素值(默认为 255)- 返回
- 自动生成
-
PSNR
public static double PSNR(Mat src1, Mat src2)
计算峰值信噪比(PSNR)图像质量指标。该函数计算两个输入数组 src1 和 src2 之间的峰值信噪比(PSNR)图像质量指标,单位为分贝(dB)。数组必须具有相同的类型。PSNR 的计算方式如下:\( \texttt{PSNR} = 10 \cdot \log_{10}{\left( \frac{R^2}{MSE} \right) } \) 其中 R 是深度的最大整数值(例如在 CV_8U 数据的情况下为 255),MSE 是两个数组之间的均方误差。- 参数
src1- 第一个输入数组。src2- 与 src1 大小相同的第二个输入数组。- 返回
- 自动生成
-
batchDistance
public static void batchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType, int K, Mat mask, int update, boolean crosscheck)
朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档- 参数
src1- 自动生成src2- 自动生成dist- 自动生成dtype- 自动生成nidx- 自动生成normType- 自动生成K- 自动生成mask- 自动生成update- 自动生成crosscheck- 自动生成
-
batchDistance
public static void batchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType, int K, Mat mask, int update)
朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档- 参数
src1- 自动生成src2- 自动生成dist- 自动生成dtype- 自动生成nidx- 自动生成normType- 自动生成K- 自动生成mask- 自动生成update- 自动生成
-
batchDistance
public static void batchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType, int K, Mat mask)
朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档- 参数
src1- 自动生成src2- 自动生成dist- 自动生成dtype- 自动生成nidx- 自动生成normType- 自动生成K- 自动生成mask- 自动生成
-
batchDistance
public static void batchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType, int K)
朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档- 参数
src1- 自动生成src2- 自动生成dist- 自动生成dtype- 自动生成nidx- 自动生成normType- 自动生成K- 自动生成
-
batchDistance
public static void batchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx, int normType)
朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档- 参数
src1- 自动生成src2- 自动生成dist- 自动生成dtype- 自动生成nidx- 自动生成normType- 自动生成
-
batchDistance
public static void batchDistance(Mat src1, Mat src2, Mat dist, int dtype, Mat nidx)
朴素最近邻查找器,参见 http://en.wikipedia.org/wiki/Nearest_neighbor_search 待办事项:编写文档- 参数
src1- 自动生成src2- 自动生成dist- 自动生成dtype- 自动生成nidx- 自动生成
-
normalize
public static void normalize(Mat src, Mat dst, double alpha, double beta, int norm_type, int dtype, Mat mask)
归一化数组的范数或数值范围。cv::normalize 函数通过缩放和偏移输入数组元素,使得当 normType 分别为 NORM_INF、NORM_L1 或 NORM_L2 时,满足 \(\| \texttt{dst} \| _{L_p}= \texttt{alpha}\)(其中 p=Inf, 1 或 2);或者当 normType=NORM_MINMAX 时,满足 \(\min _I \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I \texttt{dst} (I)= \texttt{beta}\)(仅限密集数组)。可选的掩码指定要归一化的子数组。这意味着范数或最大最小值是在子数组上计算的,然后该子数组被修改以进行归一化。如果您只想使用掩码来计算范数或最大最小值,但要修改整个数组,可以使用 norm 和 Mat::convertTo。在稀疏矩阵的情况下,仅分析和转换非零值。因此,稀疏矩阵不允许范围转换,因为这可能会偏移零级。一些正样本数据的可能用法示例:vector<double> positiveData = { 2.0, 8.0, 10.0 }; vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax; // 归一化为概率(总计数) // sum(numbers) = 20.0 // 2.0 变为 0.1 (2.0/20.0) // 8.0 变为 0.4 (8.0/20.0) // 10.0 变为 0.5 (10.0/20.0) normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1); // 归一化为单位向量: ||positiveData|| = 1.0 // 2.0 变为 0.15 // 8.0 变为 0.62 // 10.0 变为 0.77 normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2); // 归一化为最大元素 // 2.0 变为 0.2 (2.0/10.0) // 8.0 变为 0.8 (8.0/10.0) // 10.0 变为 1.0 (10.0/10.0) normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF); // 归一化到范围 [0.0;1.0] // 2.0 变为 0.0 (移动到左边界) // 8.0 变为 0.75 (6.0/8.0) // 10.0 变为 1.0 (移动到右边界) normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);注意: 由于舍入问题,最大最小归一化可能会导致产生超出提供边界的值。如果需要严格符合范围,可以使用以下解决方法:- 使用双精度浮点数(dtype = CV_64F)
- 手动裁剪数值(
cv::max(res, left_bound, res),cv::min(res, right_bound, res)或np.clip)
- 参数
src- 输入数组。dst- 与 src 大小相同的输出数组。alpha- 归一化到的范数数值,或者在范围归一化情况下的范围下限。beta- 范围归一化情况下的范围上限;范数归一化时不使用它。norm_type- 归一化类型(参见 cv::NormTypes)。dtype- 为负数时,输出数组与 src 类型相同;否则,通道数与 src 相同,且深度 =CV_MAT_DEPTH(dtype)。mask- 可选的操作掩码。 参阅:norm, Mat::convertTo, SparseMat::convertTo
-
normalize
public static void normalize(Mat src, Mat dst, double alpha, double beta, int norm_type, int dtype)
归一化数组的范数或数值范围。cv::normalize 函数通过缩放和偏移输入数组元素,使得当 normType 分别为 NORM_INF、NORM_L1 或 NORM_L2 时,满足 \(\| \texttt{dst} \| _{L_p}= \texttt{alpha}\)(其中 p=Inf, 1 或 2);或者当 normType=NORM_MINMAX 时,满足 \(\min _I \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I \texttt{dst} (I)= \texttt{beta}\)(仅限密集数组)。可选的掩码指定要归一化的子数组。这意味着范数或最大最小值是在子数组上计算的,然后该子数组被修改以进行归一化。如果您只想使用掩码来计算范数或最大最小值,但要修改整个数组,可以使用 norm 和 Mat::convertTo。在稀疏矩阵的情况下,仅分析和转换非零值。因此,稀疏矩阵不允许范围转换,因为这可能会偏移零级。一些正样本数据的可能用法示例:vector<double> positiveData = { 2.0, 8.0, 10.0 }; vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax; // 归一化为概率(总计数) // sum(numbers) = 20.0 // 2.0 变为 0.1 (2.0/20.0) // 8.0 变为 0.4 (8.0/20.0) // 10.0 变为 0.5 (10.0/20.0) normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1); // 归一化为单位向量: ||positiveData|| = 1.0 // 2.0 变为 0.15 // 8.0 变为 0.62 // 10.0 变为 0.77 normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2); // 归一化为最大元素 // 2.0 变为 0.2 (2.0/10.0) // 8.0 变为 0.8 (8.0/10.0) // 10.0 变为 1.0 (10.0/10.0) normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF); // 归一化到范围 [0.0;1.0] // 2.0 变为 0.0 (移动到左边界) // 8.0 变为 0.75 (6.0/8.0) // 10.0 变为 1.0 (移动到右边界) normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);注意: 由于舍入问题,最大最小归一化可能会导致产生超出提供边界的值。如果需要严格符合范围,可以使用以下解决方法:- 使用双精度浮点数(dtype = CV_64F)
- 手动裁剪数值(
cv::max(res, left_bound, res),cv::min(res, right_bound, res)或np.clip)
- 参数
src- 输入数组。dst- 与 src 大小相同的输出数组。alpha- 归一化到的范数数值,或者在范围归一化情况下的范围下限。beta- 范围归一化情况下的范围上限;范数归一化时不使用它。norm_type- 归一化类型(参见 cv::NormTypes)。dtype- 为负数时,输出数组与 src 类型相同;否则,通道数与 src 相同,且深度 =CV_MAT_DEPTH(dtype)。 参阅:norm, Mat::convertTo, SparseMat::convertTo
-
normalize
public static void normalize(Mat src, Mat dst, double alpha, double beta, int norm_type)
归一化数组的范数或数值范围。cv::normalize 函数通过缩放和偏移输入数组元素,使得当 normType 分别为 NORM_INF、NORM_L1 或 NORM_L2 时,满足 \(\| \texttt{dst} \| _{L_p}= \texttt{alpha}\)(其中 p=Inf, 1 或 2);或者当 normType=NORM_MINMAX 时,满足 \(\min _I \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I \texttt{dst} (I)= \texttt{beta}\)(仅限密集数组)。可选的掩码指定要归一化的子数组。这意味着范数或最大最小值是在子数组上计算的,然后该子数组被修改以进行归一化。如果您只想使用掩码来计算范数或最大最小值,但要修改整个数组,可以使用 norm 和 Mat::convertTo。在稀疏矩阵的情况下,仅分析和转换非零值。因此,稀疏矩阵不允许范围转换,因为这可能会偏移零级。一些正样本数据的可能用法示例:vector<double> positiveData = { 2.0, 8.0, 10.0 }; vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax; // 归一化为概率(总计数) // sum(numbers) = 20.0 // 2.0 变为 0.1 (2.0/20.0) // 8.0 变为 0.4 (8.0/20.0) // 10.0 变为 0.5 (10.0/20.0) normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1); // 归一化为单位向量: ||positiveData|| = 1.0 // 2.0 变为 0.15 // 8.0 变为 0.62 // 10.0 变为 0.77 normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2); // 归一化为最大元素 // 2.0 变为 0.2 (2.0/10.0) // 8.0 变为 0.8 (8.0/10.0) // 10.0 变为 1.0 (10.0/10.0) normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF); // 归一化到范围 [0.0;1.0] // 2.0 变为 0.0 (移动到左边界) // 8.0 变为 0.75 (6.0/8.0) // 10.0 变为 1.0 (移动到右边界) normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);注意: 由于舍入问题,最大最小归一化可能会导致产生超出提供边界的值。如果需要严格符合范围,可以使用以下解决方法:- 使用双精度浮点数(dtype = CV_64F)
- 手动裁剪数值(
cv::max(res, left_bound, res),cv::min(res, right_bound, res)或np.clip)
- 参数
src- 输入数组。dst- 与 src 大小相同的输出数组。alpha- 归一化到的范数数值,或者在范围归一化情况下的范围下限。beta- 范围归一化情况下的范围上限;范数归一化时不使用它。norm_type- 归一化类型(参见 cv::NormTypes)。通道数与 src 相同,且深度 =CV_MAT_DEPTH(dtype)。 参阅:norm, Mat::convertTo, SparseMat::convertTo
-
normalize
public static void normalize(Mat src, Mat dst, double alpha, double beta)
归一化数组的范数或数值范围。cv::normalize 函数通过缩放和偏移输入数组元素,使得当 normType 分别为 NORM_INF、NORM_L1 或 NORM_L2 时,满足 \(\| \texttt{dst} \| _{L_p}= \texttt{alpha}\)(其中 p=Inf, 1 或 2);或者当 normType=NORM_MINMAX 时,满足 \(\min _I \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I \texttt{dst} (I)= \texttt{beta}\)(仅限密集数组)。可选的掩码指定要归一化的子数组。这意味着范数或最大最小值是在子数组上计算的,然后该子数组被修改以进行归一化。如果您只想使用掩码来计算范数或最大最小值,但要修改整个数组,可以使用 norm 和 Mat::convertTo。在稀疏矩阵的情况下,仅分析和转换非零值。因此,稀疏矩阵不允许范围转换,因为这可能会偏移零级。一些正样本数据的可能用法示例:vector<double> positiveData = { 2.0, 8.0, 10.0 }; vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax; // 归一化为概率(总计数) // sum(numbers) = 20.0 // 2.0 变为 0.1 (2.0/20.0) // 8.0 变为 0.4 (8.0/20.0) // 10.0 变为 0.5 (10.0/20.0) normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1); // 归一化为单位向量: ||positiveData|| = 1.0 // 2.0 变为 0.15 // 8.0 变为 0.62 // 10.0 变为 0.77 normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2); // 归一化为最大元素 // 2.0 变为 0.2 (2.0/10.0) // 8.0 变为 0.8 (8.0/10.0) // 10.0 变为 1.0 (10.0/10.0) normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF); // 归一化到范围 [0.0;1.0] // 2.0 变为 0.0 (移动到左边界) // 8.0 变为 0.75 (6.0/8.0) // 10.0 变为 1.0 (移动到右边界) normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);注意: 由于舍入问题,最大最小归一化可能会导致产生超出提供边界的值。如果需要严格符合范围,可以使用以下解决方法:- 使用双精度浮点数(dtype = CV_64F)
- 手动裁剪数值(
cv::max(res, left_bound, res),cv::min(res, right_bound, res)或np.clip)
- 参数
src- 输入数组。dst- 与 src 大小相同的输出数组。alpha- 归一化到的范数数值,或者在范围归一化情况下的范围下限。beta- 范围归一化情况下的范围上限;范数归一化时不使用它。通道数与 src 相同,且深度 =CV_MAT_DEPTH(dtype)。 参阅:norm, Mat::convertTo, SparseMat::convertTo
-
normalize
public static void normalize(Mat src, Mat dst, double alpha)
归一化数组的范数或数值范围。cv::normalize 函数通过缩放和偏移输入数组元素,使得当 normType 分别为 NORM_INF、NORM_L1 或 NORM_L2 时,满足 \(\| \texttt{dst} \| _{L_p}= \texttt{alpha}\)(其中 p=Inf, 1 或 2);或者当 normType=NORM_MINMAX 时,满足 \(\min _I \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I \texttt{dst} (I)= \texttt{beta}\)(仅限密集数组)。可选的掩码指定要归一化的子数组。这意味着范数或最大最小值是在子数组上计算的,然后该子数组被修改以进行归一化。如果您只想使用掩码来计算范数或最大最小值,但要修改整个数组,可以使用 norm 和 Mat::convertTo。在稀疏矩阵的情况下,仅分析和转换非零值。因此,稀疏矩阵不允许范围转换,因为这可能会偏移零级。一些正样本数据的可能用法示例:vector<double> positiveData = { 2.0, 8.0, 10.0 }; vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax; // 归一化为概率(总计数) // sum(numbers) = 20.0 // 2.0 变为 0.1 (2.0/20.0) // 8.0 变为 0.4 (8.0/20.0) // 10.0 变为 0.5 (10.0/20.0) normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1); // 归一化为单位向量: ||positiveData|| = 1.0 // 2.0 变为 0.15 // 8.0 变为 0.62 // 10.0 变为 0.77 normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2); // 归一化为最大元素 // 2.0 变为 0.2 (2.0/10.0) // 8.0 变为 0.8 (8.0/10.0) // 10.0 变为 1.0 (10.0/10.0) normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF); // 归一化到范围 [0.0;1.0] // 2.0 变为 0.0 (移动到左边界) // 8.0 变为 0.75 (6.0/8.0) // 10.0 变为 1.0 (移动到右边界) normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);注意: 由于舍入问题,最大最小归一化可能会导致产生超出提供边界的值。如果需要严格符合范围,可以使用以下解决方法:- 使用双精度浮点数(dtype = CV_64F)
- 手动裁剪数值(
cv::max(res, left_bound, res),cv::min(res, right_bound, res)或np.clip)
- 参数
src- 输入数组。dst- 与 src 大小相同的输出数组。alpha- 归一化到的范数数值,或者在范围归一化情况下的范围下限。归一化。通道数与 src 相同,且深度 =CV_MAT_DEPTH(dtype)。 参阅:norm, Mat::convertTo, SparseMat::convertTo
-
normalize
public static void normalize(Mat src, Mat dst)
归一化数组的范数或数值范围。cv::normalize 函数通过缩放和偏移输入数组元素,使得当 normType 分别为 NORM_INF、NORM_L1 或 NORM_L2 时,满足 \(\| \texttt{dst} \| _{L_p}= \texttt{alpha}\)(其中 p=Inf, 1 或 2);或者当 normType=NORM_MINMAX 时,满足 \(\min _I \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I \texttt{dst} (I)= \texttt{beta}\)(仅限密集数组)。可选的掩码指定要归一化的子数组。这意味着范数或最大最小值是在子数组上计算的,然后该子数组被修改以进行归一化。如果您只想使用掩码来计算范数或最大最小值,但要修改整个数组,可以使用 norm 和 Mat::convertTo。在稀疏矩阵的情况下,仅分析和转换非零值。因此,稀疏矩阵不允许范围转换,因为这可能会偏移零级。一些正样本数据的可能用法示例:vector<double> positiveData = { 2.0, 8.0, 10.0 }; vector<double> normalizedData_l1, normalizedData_l2, normalizedData_inf, normalizedData_minmax; // 归一化为概率(总计数) // sum(numbers) = 20.0 // 2.0 变为 0.1 (2.0/20.0) // 8.0 变为 0.4 (8.0/20.0) // 10.0 变为 0.5 (10.0/20.0) normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1); // 归一化为单位向量: ||positiveData|| = 1.0 // 2.0 变为 0.15 // 8.0 变为 0.62 // 10.0 变为 0.77 normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2); // 归一化为最大元素 // 2.0 变为 0.2 (2.0/10.0) // 8.0 变为 0.8 (8.0/10.0) // 10.0 变为 1.0 (10.0/10.0) normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF); // 归一化到范围 [0.0;1.0] // 2.0 变为 0.0 (移动到左边界) // 8.0 变为 0.75 (6.0/8.0) // 10.0 变为 1.0 (移动到右边界) normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX);注意: 由于舍入问题,最大最小归一化可能会导致产生超出提供边界的值。如果需要严格符合范围,可以使用以下解决方法:- 使用双精度浮点数(dtype = CV_64F)
- 手动裁剪数值(
cv::max(res, left_bound, res),cv::min(res, right_bound, res)或np.clip)
- 参数
src- 输入数组。dst- 与 src 大小相同的输出数组。归一化。归一化。通道数与 src 相同,且深度 =CV_MAT_DEPTH(dtype)。 参阅:norm, Mat::convertTo, SparseMat::convertTo
-
reduceArgMin
public static void reduceArgMin(Mat src, Mat dst, int axis, boolean lastIndex)
查找沿指定轴的最小元素的索引。注意: - 如果输入或输出数组不连续,此函数将创建一个内部副本。 - NaN 处理未指定,请参阅 patchNaNs()。 - 返回的索引始终在输入矩阵的范围内。- 参数
src- 输入单通道数组。dst- 类型为 CV_32SC1 的输出数组,与 src 具有相同的维度,除了被缩减的轴——该轴的大小应设置为 1。lastIndex- 是获取最小值第一次出现还是最后一次出现的索引。axis- 沿其缩减的轴。 参阅:reduceArgMax, minMaxLoc, min, max, compare, reduce
-
reduceArgMin
public static void reduceArgMin(Mat src, Mat dst, int axis)
查找沿指定轴的最小元素的索引。注意: - 如果输入或输出数组不连续,此函数将创建一个内部副本。 - NaN 处理未指定,请参阅 patchNaNs()。 - 返回的索引始终在输入矩阵的范围内。- 参数
src- 输入单通道数组。dst- 类型为 CV_32SC1 的输出数组,与 src 具有相同的维度,除了被缩减的轴——该轴的大小应设置为 1。axis- 沿其缩减的轴。 参阅:reduceArgMax, minMaxLoc, min, max, compare, reduce
-
reduceArgMax
public static void reduceArgMax(Mat src, Mat dst, int axis, boolean lastIndex)
查找沿指定轴的最大元素的索引。注意: - 如果输入或输出数组不连续,此函数将创建一个内部副本。 - NaN 处理未指定,请参阅 patchNaNs()。 - 返回的索引始终在输入矩阵的范围内。- 参数
src- 输入单通道数组。dst- 类型为 CV_32SC1 的输出数组,与 src 具有相同的维度,除了被缩减的轴——该轴的大小应设置为 1。lastIndex- 是获取最大值第一次出现还是最后一次出现的索引。axis- 沿其缩减的轴。 参阅:reduceArgMin, minMaxLoc, min, max, compare, reduce
-
reduceArgMax
public static void reduceArgMax(Mat src, Mat dst, int axis)
查找沿指定轴的最大元素的索引。注意: - 如果输入或输出数组不连续,此函数将创建一个内部副本。 - NaN 处理未指定,请参阅 patchNaNs()。 - 返回的索引始终在输入矩阵的范围内。- 参数
src- 输入单通道数组。dst- 类型为 CV_32SC1 的输出数组,与 src 具有相同的维度,除了被缩减的轴——该轴的大小应设置为 1。axis- 沿其缩减的轴。 参阅:reduceArgMin, minMaxLoc, min, max, compare, reduce
-
reduce
public static void reduce(Mat src, Mat dst, int dim, int rtype, int dtype)
将矩阵缩减为向量。#reduce 函数通过将矩阵的行/列视为一组一维向量,并对这些向量执行指定的操作,直到获得单行/列,从而将矩阵缩减为向量。例如,该函数可用于计算光栅图像的水平和垂直投影。在 #REDUCE_MAX 和 #REDUCE_MIN 的情况下,输出图像应具有与源图像相同的类型。在 #REDUCE_SUM、#REDUCE_SUM2 和 #REDUCE_AVG 的情况下,输出可能具有更大的元素位深以保持精度。这两种缩减模式也支持多通道数组。以下代码演示了它在单通道矩阵上的用法。代码片段:snippets/core_reduce.cpp example。以下代码演示了它在双通道矩阵上的用法。代码片段:snippets/core_reduce.cpp example2- 参数
src- 输入二维矩阵。dst- 输出向量。其大小和类型由 dim 和 dtype 参数定义。dim- 矩阵沿其缩减的维度索引。0 表示矩阵缩减为单行。1 表示矩阵缩减为单列。rtype- 缩减操作,可以是 #ReduceTypes 之一。dtype- 为负数时,输出向量将具有与输入矩阵相同的类型,否则,其类型将为 CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels())。 参阅:repeat, reduceArgMin, reduceArgMax
-
reduce
public static void reduce(Mat src, Mat dst, int dim, int rtype)
将矩阵缩减为向量。#reduce 函数通过将矩阵的行/列视为一组一维向量,并对这些向量执行指定的操作,直到获得单行/列,从而将矩阵缩减为向量。例如,该函数可用于计算光栅图像的水平和垂直投影。在 #REDUCE_MAX 和 #REDUCE_MIN 的情况下,输出图像应具有与源图像相同的类型。在 #REDUCE_SUM、#REDUCE_SUM2 和 #REDUCE_AVG 的情况下,输出可能具有更大的元素位深以保持精度。这两种缩减模式也支持多通道数组。以下代码演示了它在单通道矩阵上的用法。代码片段:snippets/core_reduce.cpp example。以下代码演示了它在双通道矩阵上的用法。代码片段:snippets/core_reduce.cpp example2- 参数
src- 输入二维矩阵。dst- 输出向量。其大小和类型由 dim 和 dtype 参数定义。dim- 矩阵沿其缩减的维度索引。0 表示矩阵缩减为单行。1 表示矩阵缩减为单列。rtype- 缩减操作,可以是 #ReduceTypes 之一,否则,其类型将为 CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels())。 参阅:repeat, reduceArgMin, reduceArgMax
-
merge
public static void merge(java.util.List<Mat> mv, Mat dst)
- 参数
mv- 要合并的矩阵的输入向量;mv 中的所有矩阵必须具有相同的大小和相同的深度。dst- 与 mv[0] 大小和深度相同的输出数组;通道数将是矩阵数组中的通道总数。
-
split
public static void split(Mat m, java.util.List<Mat> mv)
- 参数
m- 输入多通道数组。mv- 数组的输出向量;如有需要,数组本身会被重新分配。
-
mixChannels
public static void mixChannels(java.util.List<Mat> src, java.util.List<Mat> dst, MatOfInt fromTo)
- 参数
src- 输入数组或矩阵向量;所有矩阵必须具有相同的大小和相同的深度。dst- 输出数组或矩阵向量;所有矩阵必须已经分配;它们的大小和深度必须与 src[0] 相同。fromTo- 索引对数组,指定复制哪些通道以及复制到何处;fromTo[k*2] 是 src 中输入通道的从 0 开始的索引,fromTo[k*2+1] 是 dst 中输出通道的索引;使用连续通道编号:第一个输入图像通道索引从 0 到 src[0].channels()-1,第二个输入图像通道索引从 src[0].channels() 到 src[0].channels() + src[1].channels()-1,以此类推,输出图像通道也使用相同的方案;作为一种特殊情况,当 fromTo[k*2] 为负数时,相应的输出通道将填充为零。
-
extractChannel
public static void extractChannel(Mat src, Mat dst, int coi)
从 src 中提取单个通道(coi 是从 0 开始的索引)- 参数
src- 输入数组dst- 输出数组coi- 要提取的通道索引 参阅:mixChannels, split
-
insertChannel
public static void insertChannel(Mat src, Mat dst, int coi)
将单个通道插入 dst(coi 是从 0 开始的索引)- 参数
src- 输入数组dst- 输出数组coi- 要插入的通道索引 参阅:mixChannels, merge
-
flip
public static void flip(Mat src, Mat dst, int flipCode)
围绕垂直、水平或两个轴翻转二维数组。cv::flip 函数以三种不同方式之一翻转数组(行和列索引从 0 开始):\(\texttt{dst} _{ij} = \left\{ \begin{array}{l l} \texttt{src} _{\texttt{src.rows}-i-1,j} & if\; \texttt{flipCode} = 0 \\ \texttt{src} _{i, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} > 0 \\ \texttt{src} _{ \texttt{src.rows} -i-1, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} < 0 \\ \end{array} \right.\) 使用该函数的示例场景如下:垂直翻转图像(flipCode == 0)以在左上角和左下角图像原点之间切换。这是 Microsoft Windows* OS 上视频处理中的典型操作。水平翻转图像,随后进行水平位移和绝对差值计算,以检查垂直轴对称性(flipCode > 0)。同时进行水平和垂直翻转图像,随后进行位移和绝对差值计算,以检查中心对称性(flipCode < 0)。反转点数组的顺序(flipCode > 0 或 flipCode == 0)。- 参数
src- 输入数组。dst- 与 src 大小和类型相同的输出数组。flipCode- 指定如何翻转数组的标志;0 表示围绕 x 轴翻转,正值(例如 1)表示围绕 y 轴翻转。负值(例如 -1)表示围绕两个轴翻转。 参阅:transpose, repeat, completeSymm
-
flipND
public static void flipND(Mat src, Mat dst, int axis)
在给定轴上翻转 n 维数组- 参数
src- 输入数组dst- 与 src 形状相同的输出数组axis- 执行翻转的轴。0 <= axis < src.dims。
-
broadcast
public static void broadcast(Mat src, Mat shape, Mat dst)
将给定的 Mat 广播到指定的形状。- 参数
src- 输入数组shape- 目标形状。应为 CV_32S 数字列表。注意不支持负值。dst- 具有给定形状的输出数组
-
rotate
public static void rotate(Mat src, Mat dst, int rotateCode)
以 90 度的倍数旋转二维数组。cv::rotate 函数以三种不同方式之一旋转数组:顺时针旋转 90 度 (rotateCode = ROTATE_90_CLOCKWISE)。顺时针旋转 180 度 (rotateCode = ROTATE_180)。顺时针旋转 270 度 (rotateCode = ROTATE_90_COUNTERCLOCKWISE)。- 参数
src- 输入数组。dst- 与 src 类型相同的输出数组。对于 ROTATE_180,大小相同;对于 ROTATE_90_CLOCKWISE 和 ROTATE_90_COUNTERCLOCKWISE,行和列互换。rotateCode- 指定如何旋转数组的枚举;参见枚举 #RotateFlags。 参阅:transpose, repeat, completeSymm, flip, RotateFlags
-
repeat
public static void repeat(Mat src, int ny, int nx, Mat dst)
使用输入数组的重复副本填充输出数组。cv::repeat 函数沿两个轴中的每一个将输入数组复制一次或多次:\(\texttt{dst} _{ij}= \texttt{src} _{i\mod src.rows, \; j\mod src.cols }\) 该函数的第二个变体更方便与 参考:MatrixExpressions 配合使用。- 参数
src- 要复制的输入数组。ny- 指定src沿垂直轴重复多少次的标志。nx- 指定src沿水平轴重复多少次的标志。dst- 与src类型相同的输出数组。 参阅:cv::reduce
-
hconcat
public static void hconcat(java.util.List<Mat> src, Mat dst)
std::vector<cv::Mat> matrices = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)), cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)), cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),}; cv::Mat out; cv::hconcat( matrices, out ); //out: //[1, 2, 3; // 1, 2, 3; // 1, 2, 3; // 1, 2, 3]- 参数
src- 输入数组或矩阵向量。所有矩阵必须具有相同的行数和相同的深度。dst- 输出数组。它具有与 src 相同的行数和深度,列数是 src 中所有列的总和。深度相同。
-
vconcat
public static void vconcat(java.util.List<Mat> src, Mat dst)
std::vector<cv::Mat> matrices = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)), cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)), cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),}; cv::Mat out; cv::vconcat( matrices, out ); //out: //[1, 1, 1, 1; // 2, 2, 2, 2; // 3, 3, 3, 3]- 参数
src- 输入数组或矩阵向量。所有矩阵必须具有相同的列数和相同的深度dst- 输出数组。它具有与 src 相同的列数和深度,行数是 src 中所有行的总和。深度相同。
-
bitwise_and
public static void bitwise_and(Mat src1, Mat src2, Mat dst, Mat mask)
计算两个数组的按位与运算 (dst = src1 & src2)。计算两个数组或一个数组与一个标量的逐元素按位与。cv::bitwise_and 函数计算以下情况的逐元素按位逻辑与:当 src1 和 src2 大小相同时的两个数组:\(\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。当 src2 由 Scalar 构造或具有与src1.channels()相同数量的元素时,一个数组和一个标量:\(\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} \quad \texttt{if mask} (I) \ne0\)。当 src1 由 Scalar 构造或具有与src2.channels()相同数量的元素时,一个标量和一个数组:\(\texttt{dst} (I) = \texttt{src1} \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。对于浮点数组,操作使用其机器特定的位表示(通常符合 IEEE754)。如果是多通道数组,每个通道将独立处理。在上述第二和第三种情况下,标量首先转换为数组类型。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组具有相同大小和类型的输出数组。mask- 可选的操作掩码,8 位单通道数组,指定输出数组中要更改的元素。
-
bitwise_and
public static void bitwise_and(Mat src1, Mat src2, Mat dst)
计算两个数组的按位与运算 (dst = src1 & src2)。计算两个数组或一个数组与一个标量的逐元素按位与。cv::bitwise_and 函数计算以下情况的逐元素按位逻辑与:当 src1 和 src2 大小相同时的两个数组:\(\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。当 src2 由 Scalar 构造或具有与src1.channels()相同数量的元素时,一个数组和一个标量:\(\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} \quad \texttt{if mask} (I) \ne0\)。当 src1 由 Scalar 构造或具有与src2.channels()相同数量的元素时,一个标量和一个数组:\(\texttt{dst} (I) = \texttt{src1} \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。对于浮点数组,操作使用其机器特定的位表示(通常符合 IEEE754)。如果是多通道数组,每个通道将独立处理。在上述第二和第三种情况下,标量首先转换为数组类型。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组具有相同大小和类型的输出数组。指定输出数组中要更改的元素。
-
bitwise_or
public static void bitwise_or(Mat src1, Mat src2, Mat dst, Mat mask)
计算两个数组或一个数组与一个标量的逐元素按位或运算。cv::bitwise_or 函数计算以下情况的逐元素按位逻辑或:当 src1 和 src2 大小相同时的两个数组:\(\texttt{dst} (I) = \texttt{src1} (I) \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。当 src2 由 Scalar 构造或具有与src1.channels()相同数量的元素时,一个数组和一个标量:\(\texttt{dst} (I) = \texttt{src1} (I) \vee \texttt{src2} \quad \texttt{if mask} (I) \ne0\)。当 src1 由 Scalar 构造或具有与src2.channels()相同数量的元素时,一个标量和一个数组:\(\texttt{dst} (I) = \texttt{src1} \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。对于浮点数组,操作使用其机器特定的位表示(通常符合 IEEE754)。如果是多通道数组,每个通道将独立处理。在上述第二和第三种情况下,标量首先转换为数组类型。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组具有相同大小和类型的输出数组。mask- 可选的操作掩码,8 位单通道数组,指定输出数组中要更改的元素。
-
bitwise_or
public static void bitwise_or(Mat src1, Mat src2, Mat dst)
计算两个数组或一个数组与一个标量的逐元素按位或运算。cv::bitwise_or 函数计算以下情况的逐元素按位逻辑或:当 src1 和 src2 大小相同时的两个数组:\(\texttt{dst} (I) = \texttt{src1} (I) \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。当 src2 由 Scalar 构造或具有与src1.channels()相同数量的元素时,一个数组和一个标量:\(\texttt{dst} (I) = \texttt{src1} (I) \vee \texttt{src2} \quad \texttt{if mask} (I) \ne0\)。当 src1 由 Scalar 构造或具有与src2.channels()相同数量的元素时,一个标量和一个数组:\(\texttt{dst} (I) = \texttt{src1} \vee \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。对于浮点数组,操作使用其机器特定的位表示(通常符合 IEEE754)。如果是多通道数组,每个通道将独立处理。在上述第二和第三种情况下,标量首先转换为数组类型。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组具有相同大小和类型的输出数组。指定输出数组中要更改的元素。
-
bitwise_xor
public static void bitwise_xor(Mat src1, Mat src2, Mat dst, Mat mask)
计算两个数组或一个数组与一个标量的逐元素按位“异或”运算。cv::bitwise_xor 函数计算以下情况的逐元素按位逻辑“异或”运算:当 src1 和 src2 大小相同时的两个数组:\(\texttt{dst} (I) = \texttt{src1} (I) \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。当 src2 由 Scalar 构造或具有与src1.channels()相同数量的元素时,一个数组和一个标量:\(\texttt{dst} (I) = \texttt{src1} (I) \oplus \texttt{src2} \quad \texttt{if mask} (I) \ne0\)。当 src1 由 Scalar 构造或具有与src2.channels()相同数量的元素时,一个标量和一个数组:\(\texttt{dst} (I) = \texttt{src1} \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。对于浮点数组,操作使用其机器特定的位表示(通常符合 IEEE754)。如果是多通道数组,每个通道将独立处理。在第 2 和第 3 种情况下,标量首先转换为数组类型。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组具有相同大小和类型的输出数组。mask- 可选的操作掩码,8 位单通道数组,指定输出数组中要更改的元素。
-
bitwise_xor
public static void bitwise_xor(Mat src1, Mat src2, Mat dst)
计算两个数组或一个数组与一个标量的逐元素按位“异或”运算。cv::bitwise_xor 函数计算以下情况的逐元素按位逻辑“异或”运算:当 src1 和 src2 大小相同时的两个数组:\(\texttt{dst} (I) = \texttt{src1} (I) \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。当 src2 由 Scalar 构造或具有与src1.channels()相同数量的元素时,一个数组和一个标量:\(\texttt{dst} (I) = \texttt{src1} (I) \oplus \texttt{src2} \quad \texttt{if mask} (I) \ne0\)。当 src1 由 Scalar 构造或具有与src2.channels()相同数量的元素时,一个标量和一个数组:\(\texttt{dst} (I) = \texttt{src1} \oplus \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0\)。对于浮点数组,操作使用其机器特定的位表示(通常符合 IEEE754)。如果是多通道数组,每个通道将独立处理。在第 2 和第 3 种情况下,标量首先转换为数组类型。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组具有相同大小和类型的输出数组。指定输出数组中要更改的元素。
-
bitwise_not
public static void bitwise_not(Mat src, Mat dst, Mat mask)
反转数组的每一位。cv::bitwise_not 函数计算输入数组的逐元素按位取反:\(\texttt{dst} (I) = \neg \texttt{src} (I)\)。如果是浮点输入数组,操作使用其机器特定的位表示(通常符合 IEEE754)。如果是多通道数组,每个通道将独立处理。- 参数
src- 输入数组。dst- 与输入数组具有相同大小和类型的输出数组。mask- 可选的操作掩码,8 位单通道数组,指定输出数组中要更改的元素。
-
bitwise_not
public static void bitwise_not(Mat src, Mat dst)
反转数组的每一位。cv::bitwise_not 函数计算输入数组的逐元素按位取反:\(\texttt{dst} (I) = \neg \texttt{src} (I)\)。如果是浮点输入数组,操作使用其机器特定的位表示(通常符合 IEEE754)。如果是多通道数组,每个通道将独立处理。- 参数
src- 输入数组。dst- 与输入数组具有相同大小和类型的输出数组。指定输出数组中要更改的元素。
-
absdiff
public static void absdiff(Mat src1, Mat src2, Mat dst)
计算两个数组之间或数组与标量之间的逐元素绝对差。cv::absdiff 函数计算:当两个数组大小和类型相同时的绝对差:\(\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1}(I) - \texttt{src2}(I)|)\)。当第二个数组由 Scalar 构造或其元素个数与src1的通道数相同时,数组与标量之间的绝对差:\(\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1}(I) - \texttt{src2} |)\)。当第一个数组由 Scalar 构造或其元素个数与src2的通道数相同时,标量与数组之间的绝对差:\(\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1} - \texttt{src2}(I) |)\)。其中 I 是数组元素的多维索引。在多通道数组的情况下,每个通道独立处理。注意: 当数组深度为 CV_32S 时,不应用饱和运算(Saturation)。在溢出的情况下,您甚至可能会得到负值。注意: (Python) 注意 src1/src2 是单个数值还是元组/数组时的不同行为。absdiff(src,X)意味着absdiff(src,(X,X,X,X))。absdiff(src,(X,))意味着absdiff(src,(X,0,0,0))。- 参数
src1- 第一个输入数组或标量。src2- 第二个输入数组或标量。dst- 与输入数组具有相同大小和类型的输出数组。 参阅:cv::abs(const Mat&)
-
copyTo
public static void copyTo(Mat src, Mat dst, Mat mask)
这是一个为了方便而提供的重载成员函数 (python)。将矩阵复制到另一个矩阵。当指定了操作掩码时,如果上面显示的 Mat::create 调用重新分配了矩阵,则新分配的矩阵在复制数据之前会被初始化为全零。- 参数
src- 源矩阵。dst- 目标矩阵。如果操作前它没有适当的大小或类型,它会被重新分配。mask- 与 *this 大小相同的操作掩码。其非零元素指示需要复制哪些矩阵元素。掩码必须是 CV_8U 类型,可以具有 1 个或多个通道。
-
inRange
public static void inRange(Mat src, Scalar lowerb, Scalar upperb, Mat dst)
检查数组元素是否位于另外两个数组的元素之间。该函数按如下方式检查范围- 对于单通道输入数组的每个元素:\(\texttt{dst} (I)= \texttt{lowerb} (I)_0 \leq \texttt{src} (I)_0 \leq \texttt{upperb} (I)_0\)
- 对于双通道数组:\(\texttt{dst} (I)= \texttt{lowerb} (I)_0 \leq \texttt{src} (I)_0 \leq \texttt{upperb} (I)_0 \land \texttt{lowerb} (I)_1 \leq \texttt{src} (I)_1 \leq \texttt{upperb} (I)_1\)
- 依此类推。
- 参数
src- 第一个输入数组。lowerb- 包含型的下边界数组或标量。upperb- 包含型的上边界数组 or 标量。dst- 与 src 大小相同且类型为 CV_8U 的输出数组。
-
compare
public static void compare(Mat src1, Mat src2, Mat dst, int cmpop)
执行两个数组或一个数组与一个标量值的逐元素比较。该函数比较:当 src1 和 src2 大小相同时的两个数组的元素:\(\texttt{dst} (I) = \texttt{src1} (I) \,\texttt{cmpop}\, \texttt{src2} (I)\)。当 src2 由 Scalar 构造或具有单个元素时,src1 的元素与标量 src2 比较:\(\texttt{dst} (I) = \texttt{src1}(I) \,\texttt{cmpop}\, \texttt{src2}\)。当 src1 由 Scalar 构造或具有单个元素时,src1 与 src2 的元素比较:\(\texttt{dst} (I) = \texttt{src1} \,\texttt{cmpop}\, \texttt{src2} (I)\)。当比较结果为真时,输出数组的相应元素被设置为 255。比较操作可以用等效的矩阵表达式替换:Mat dst1 = src1 >= src2; Mat dst2 = src1 < 8; ...- 参数
src1- 第一个输入数组或标量;当它是数组时,必须是单通道。src2- 第二个输入数组或标量;当它是数组时,必须是单通道。dst- 类型为 CV_8U 的输出数组,与输入数组具有相同的大小和通道数。cmpop- 一个标志,指定数组之间的对应关系 (cv::CmpTypes)。 参阅:checkRange, min, max, threshold
-
min
public static void min(Mat src1, Mat src2, Mat dst)
计算两个数组或一个数组与一个标量的逐元素最小值。cv::min 函数计算两个数组的逐元素最小值:\(\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{src2} (I))\) 或数组与标量的最小值:\(\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{value} )\)- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。dst- 与 src1 大小和类型相同的输出数组。 参阅:max, compare, inRange, minMaxLoc
-
max
public static void max(Mat src1, Mat src2, Mat dst)
计算两个数组或一个数组与一个标量的逐元素最大值。cv::max 函数计算两个数组的逐元素最大值:\(\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{src2} (I))\) 或数组与标量的最大值:\(\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{value} )\)- 参数
src1- 第一个输入数组。src2- 与 src1 大小和类型相同的第二个输入数组。dst- 与 src1 大小和类型相同的输出数组。 参阅:min, compare, inRange, minMaxLoc, 参考:MatrixExpressions
-
sqrt
public static void sqrt(Mat src, Mat dst)
计算数组元素的平方根。cv::sqrt 函数计算每个输入数组元素的平方根。如果是多通道数组,每个通道独立处理。精度与内置的 std::sqrt 大致相同。- 参数
src- 输入浮点数组。dst- 与 src 大小和类型相同的输出数组。
-
pow
public static void pow(Mat src, double power, Mat dst)
将每个数组元素提升到某个幂次。cv::pow 函数将输入数组的每个元素提升到 power 次幂:\(\texttt{dst} (I) = \fork{\texttt{src}(I)^{power}}{如果 \(\texttt{power}\) 是整数}{|\texttt{src}(I)|^{power}}{否则}\)。因此,对于非整数幂指数,使用输入数组元素的绝对值。然而,可以通过一些额外的操作来获得负值的真实值。在下面的示例中,计算数组 src 的 5 次方根显示:Mat mask = src < 0; pow(src, 1./5, dst); subtract(Scalar::all(0), dst, dst, mask);对于某些 power 值,例如整数值、0.5 和 -0.5,使用了专门的快速算法。不处理特殊值 (NaN, Inf)。- 参数
src- 输入数组。power- 幂指数。dst- 与 src 大小和类型相同的输出数组。 参阅:sqrt, exp, log, cartToPolar, polarToCart
-
exp
public static void exp(Mat src, Mat dst)
计算每个数组元素的指数。cv::exp 函数计算输入数组每个元素的指数:\(\texttt{dst} [I] = e^{ src(I) }\)。对于单精度输入,最大相对误差约为 7e-6,对于双精度输入,小于 1e-10。目前,该函数在输出时将非规范化值(denormalized values)转换为零。不处理特殊值 (NaN, Inf)。- 参数
src- 输入数组。dst- 与 src 大小和类型相同的输出数组。 参阅:log, cartToPolar, polarToCart, phase, pow, sqrt, magnitude
-
log
public static void log(Mat src, Mat dst)
计算每个数组元素的自然对数。cv::log 函数计算输入数组每个元素的自然对数:\(\texttt{dst} (I) = \log (\texttt{src}(I)) \)。零值、负值和特殊值 (NaN, Inf) 的输出是未定义的。- 参数
src- 输入数组。dst- 与 src 大小和类型相同的输出数组。 参阅:exp, cartToPolar, polarToCart, phase, pow, sqrt, magnitude
-
polarToCart
public static void polarToCart(Mat magnitude, Mat angle, Mat x, Mat y, boolean angleInDegrees)
根据二维向量的幅度和角度计算其 x 和 y 坐标。cv::polarToCart 函数计算由幅度(magnitude)和角度(angle)的相应元素表示的每个二维向量的笛卡尔坐标:\(\begin{array}{l} \texttt{x} (I) = \texttt{magnitude} (I) \cos ( \texttt{angle} (I)) \\ \texttt{y} (I) = \texttt{magnitude} (I) \sin ( \texttt{angle} (I)) \\ \end{array}\)。估计坐标的相对精度约为 1e-6。- 参数
magnitude- 二维向量幅度的输入浮点数组;它可以是一个空矩阵 (=Mat()),在这种情况下,函数假设所有幅度均为 1;如果不为空,它必须与 angle 具有相同的大小和类型。angle- 二维向量角度的输入浮点数组。x- 二维向量 x 坐标的输出数组;它具有与 angle 相同的大小和类型。y- 二维向量 y 坐标的输出数组;它具有与 angle 相同的大小和类型。angleInDegrees- 为真时,输入角度以度为单位测量,否则以弧度测量。 参阅:cartToPolar, magnitude, phase, exp, log, pow, sqrt
-
polarToCart
public static void polarToCart(Mat magnitude, Mat angle, Mat x, Mat y)
根据二维向量的幅度和角度计算其 x 和 y 坐标。cv::polarToCart 函数计算由幅度(magnitude)和角度(angle)的相应元素表示的每个二维向量的笛卡尔坐标:\(\begin{array}{l} \texttt{x} (I) = \texttt{magnitude} (I) \cos ( \texttt{angle} (I)) \\ \texttt{y} (I) = \texttt{magnitude} (I) \sin ( \texttt{angle} (I)) \\ \end{array}\)。估计坐标的相对精度约为 1e-6。- 参数
magnitude- 二维向量幅度的输入浮点数组;它可以是一个空矩阵 (=Mat()),在这种情况下,函数假设所有幅度均为 1;如果不为空,它必须与 angle 具有相同的大小和类型。angle- 二维向量角度的输入浮点数组。x- 二维向量 x 坐标的输出数组;它具有与 angle 相同的大小和类型。y- 二维向量 y 坐标的输出数组;它具有与 angle 相同的大小和类型。否则以弧度测量。 参阅:cartToPolar, magnitude, phase, exp, log, pow, sqrt
-
cartToPolar
public static void cartToPolar(Mat x, Mat y, Mat magnitude, Mat angle, boolean angleInDegrees)
计算二维向量的幅度和角度。cv::cartToPolar 函数为每个二维向量 (x(I),y(I)) 计算幅度、角度或两者:\(\begin{array}{l} \texttt{magnitude} (I)= \sqrt{\texttt{x}(I)^2+\texttt{y}(I)^2} , \\ \texttt{angle} (I)= \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))[ \cdot180 / \pi ] \end{array}\)。角度计算精度约为 0.3 度。对于点 (0,0),角度设置为 0。- 参数
x- x 坐标数组;这必须是单精度或双精度浮点数组。y- y 坐标数组,必须与 x 具有相同的大小和类型。magnitude- 与 x 大小和类型相同的幅度输出数组。angle- 与 x 大小和类型相同的角度输出数组;角度以弧度(0 到 2*Pi)或度(0 到 360 度)测量。angleInDegrees- 一个标志,指示角度是以弧度(默认)还是度测量。 参阅:Sobel, Scharr
-
cartToPolar
public static void cartToPolar(Mat x, Mat y, Mat magnitude, Mat angle)
计算二维向量的幅度和角度。cv::cartToPolar 函数为每个二维向量 (x(I),y(I)) 计算幅度、角度或两者:\(\begin{array}{l} \texttt{magnitude} (I)= \sqrt{\texttt{x}(I)^2+\texttt{y}(I)^2} , \\ \texttt{angle} (I)= \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))[ \cdot180 / \pi ] \end{array}\)。角度计算精度约为 0.3 度。对于点 (0,0),角度设置为 0。- 参数
x- x 坐标数组;这必须是单精度或双精度浮点数组。y- y 坐标数组,必须与 x 具有相同的大小和类型。magnitude- 与 x 大小和类型相同的幅度输出数组。angle- 与 x 大小和类型相同的角度输出数组;角度以弧度(0 到 2*Pi)或度(0 到 360 度)测量。以弧度(默认)还是度测量。 参阅:Sobel, Scharr
-
phase
public static void phase(Mat x, Mat y, Mat angle, boolean angleInDegrees)
计算二维向量的旋转角度。cv::phase 函数计算由 x 和 y 的相应元素形成的每个二维向量的旋转角度:\(\texttt{angle} (I) = \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))\)。角度估计精度约为 0.3 度。当 x(I)=y(I)=0 时,相应的角度 (I) 设置为 0。- 参数
x- 二维向量 x 坐标的输入浮点数组。y- 二维向量 y 坐标的输入数组;它必须与 x 具有相同的大小和类型。angle- 向量角度的输出数组;它具有与 x 相同的大小和类型。angleInDegrees- 为真时,函数以度为单位计算角度,否则以弧度测量。
-
phase
public static void phase(Mat x, Mat y, Mat angle)
计算二维向量的旋转角度。cv::phase 函数计算由 x 和 y 的相应元素形成的每个二维向量的旋转角度:\(\texttt{angle} (I) = \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))\)。角度估计精度约为 0.3 度。当 x(I)=y(I)=0 时,相应的角度 (I) 设置为 0。- 参数
x- 二维向量 x 坐标的输入浮点数组。y- 二维向量 y 坐标的输入数组;它必须与 x 具有相同的大小和类型。angle- 向量角度的输出数组;它具有与 x 相同的大小和类型。否则以弧度测量。
-
magnitude (幅度)
public static void magnitude(Mat x, Mat y, Mat magnitude)
计算二维向量的幅度。cv::magnitude 函数计算由 x 和 y 数组的相应元素形成的二维向量的幅度:\(\texttt{dst} (I) = \sqrt{\texttt{x}(I)^2 + \texttt{y}(I)^2}\)- 参数
x- 向量 x 坐标的浮点数组。y- 向量 y 坐标的浮点数组;它必须与 x 大小相同。magnitude- 与 x 大小和类型相同的输出数组。 参阅:cartToPolar, polarToCart, phase, sqrt
-
checkRange
public static boolean checkRange(Mat a, boolean quiet, double minVal, double maxVal)
检查输入数组的每个元素是否包含无效值。cv::checkRange 函数检查每个数组元素既不是 NaN 也不是无穷大。当 minVal >- DBL_MAX 且 maxVal < DBL_MAX 时,函数还会检查每个值是否介于 minVal 和 maxVal 之间。如果是多通道数组,每个通道独立处理。如果某些值超出范围,第一个离群值的位置存储在 pos 中(当 pos != NULL 时)。然后,函数要么返回 false(当 quiet=true 时),要么抛出异常。
- 参数
a- 输入数组。quiet- 一个标志,指示当数组元素超出范围时,函数是安静地返回 false 还是抛出异常。minVal- 有效值范围的包含性下边界。maxVal- 有效值范围的排他性上边界。- 返回
- 自动生成
-
checkRange
public static boolean checkRange(Mat a, boolean quiet, double minVal)
检查输入数组的每个元素是否包含无效值。cv::checkRange 函数检查每个数组元素既不是 NaN 也不是无穷大。当 minVal >- DBL_MAX 且 maxVal < DBL_MAX 时,函数还会检查每个值是否介于 minVal 和 maxVal 之间。如果是多通道数组,每个通道独立处理。如果某些值超出范围,第一个离群值的位置存储在 pos 中(当 pos != NULL 时)。然后,函数要么返回 false(当 quiet=true 时),要么抛出异常。
- 参数
a- 输入数组。quiet- 一个标志,指示当数组元素超出范围时,函数是安静地返回 false 还是抛出异常。minVal- 有效值范围的包含性下边界。- 返回
- 自动生成
-
checkRange
public static boolean checkRange(Mat a, boolean quiet)
检查输入数组的每个元素是否包含无效值。cv::checkRange 函数检查每个数组元素既不是 NaN 也不是无穷大。当 minVal >- DBL_MAX 且 maxVal < DBL_MAX 时,函数还会检查每个值是否介于 minVal 和 maxVal 之间。如果是多通道数组,每个通道独立处理。如果某些值超出范围,第一个离群值的位置存储在 pos 中(当 pos != NULL 时)。然后,函数要么返回 false(当 quiet=true 时),要么抛出异常。
- 参数
a- 输入数组。quiet- 一个标志,指示当数组元素超出范围时,函数是安静地返回 false 还是抛出异常。- 返回
- 自动生成
-
checkRange
public static boolean checkRange(Mat a)
检查输入数组的每个元素是否包含无效值。cv::checkRange 函数检查每个数组元素既不是 NaN 也不是无穷大。当 minVal >- DBL_MAX 且 maxVal < DBL_MAX 时,函数还会检查每个值是否介于 minVal 和 maxVal 之间。如果是多通道数组,每个通道独立处理。如果某些值超出范围,第一个离群值的位置存储在 pos 中(当 pos != NULL 时)。然后,函数要么返回 false(当 quiet=true 时),要么抛出异常。
- 参数
a- 输入数组。超出范围还是抛出异常。- 返回
- 自动生成
-
patchNaNs
public static void patchNaNs(Mat a, double val)
将矩阵中的 NaN(非数字值)替换为指定值。该函数就地修改输入矩阵。输入矩阵必须是CV_32F或CV_64F类型;不支持其他类型。- 参数
a- 输入/输出矩阵(CV_32F 或 CV_64F 类型)。val- 用于替换 NaN 的值(默认为 0)。
-
patchNaNs
public static void patchNaNs(Mat a)
将矩阵中的 NaN(非数字值)替换为指定值。该函数就地修改输入矩阵。输入矩阵必须是CV_32F或CV_64F类型;不支持其他类型。- 参数
a- 输入/输出矩阵(CV_32F 或 CV_64F 类型)。
-
gemm
public static void gemm(Mat src1, Mat src2, double alpha, Mat src3, double beta, Mat dst, int flags)
执行广义矩阵乘法。cv::gemm 函数执行类似于 BLAS 3 级中 gemm 函数的广义矩阵乘法。例如,gemm(src1, src2, alpha, src3, beta, dst, GEMM_1_T + GEMM_3_T)对应于 \(\texttt{dst} = \texttt{alpha} \cdot \texttt{src1} ^T \cdot \texttt{src2} + \texttt{beta} \cdot \texttt{src3} ^T\)。在复数(双通道)数据的情况下,执行复数矩阵乘法。该函数可以用矩阵表达式替代。例如,上述调用可以替换为:dst = alpha*src1.t()*src2 + beta*src3.t();- 参数
src1- 第一个相乘的输入矩阵,可以是实数(CV_32FC1, CV_64FC1)或复数(CV_32FC2, CV_64FC2)。src2- 与 src1 类型相同的第二个相乘输入矩阵。alpha- 矩阵乘积的权重。src3- 添加到矩阵乘积的第三个可选增量矩阵;它应具有与 src1 和 src2 相同的类型。beta- src3 的权重。dst- 输出矩阵;它具有适当的大小和与输入矩阵相同的类型。flags- 操作标志 (cv::GemmFlags) 参阅:mulTransposed, transform
-
gemm
public static void gemm(Mat src1, Mat src2, double alpha, Mat src3, double beta, Mat dst)
执行广义矩阵乘法。cv::gemm 函数执行类似于 BLAS 3 级中 gemm 函数的广义矩阵乘法。例如,gemm(src1, src2, alpha, src3, beta, dst, GEMM_1_T + GEMM_3_T)对应于 \(\texttt{dst} = \texttt{alpha} \cdot \texttt{src1} ^T \cdot \texttt{src2} + \texttt{beta} \cdot \texttt{src3} ^T\)。在复数(双通道)数据的情况下,执行复数矩阵乘法。该函数可以用矩阵表达式替代。例如,上述调用可以替换为:dst = alpha*src1.t()*src2 + beta*src3.t();- 参数
src1- 第一个相乘的输入矩阵,可以是实数(CV_32FC1, CV_64FC1)或复数(CV_32FC2, CV_64FC2)。src2- 与 src1 类型相同的第二个相乘输入矩阵。alpha- 矩阵乘积的权重。src3- 添加到矩阵乘积的第三个可选增量矩阵;它应具有与 src1 和 src2 相同的类型。beta- src3 的权重。dst- 输出矩阵;它具有适当的大小和与输入矩阵相同的类型。 参阅:mulTransposed, transform
-
mulTransposed
public static void mulTransposed(Mat src, Mat dst, boolean aTa, Mat delta, double scale, int dtype)
计算矩阵及其转置的乘积。cv::mulTransposed 函数计算 src 及其转置的乘积:如果 aTa=true,则 \(\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )\),否则 \(\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( \texttt{src} - \texttt{delta} )^T\)。该函数用于计算协方差矩阵。当 delta 为零时,它可以作为通用矩阵乘积 A*B(当 B=A' 时)的更快替代方案。- 参数
src- 输入单通道矩阵。注意,与 gemm 不同,该函数不仅可以乘以浮点矩阵。dst- 输出方阵。aTa- 指定乘法顺序的标志。请参阅下面的说明。delta- 乘法前从 src 中减去的可选增量矩阵。当矩阵为空(delta=noArray())时,假设为零,即不减去任何内容。如果它与 src 大小相同,则直接减去。否则,它将被“重复”(见 repeat)以覆盖整个 src 然后减去。当 delta 矩阵不为空时,其类型必须与创建的输出矩阵的类型相同。请参阅下面的 dtype 参数说明。scale- 矩阵乘积的可选缩放因子。dtype- 输出矩阵的可选类型。当它为负数时,输出矩阵将具有与 src 相同的类型。否则,它的类型将是 type=CV_MAT_DEPTH(dtype),应为 CV_32F 或 CV_64F。 参阅:calcCovarMatrix, gemm, repeat, reduce
-
mulTransposed
public static void mulTransposed(Mat src, Mat dst, boolean aTa, Mat delta, double scale)
计算矩阵及其转置的乘积。cv::mulTransposed 函数计算 src 及其转置的乘积:如果 aTa=true,则 \(\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )\),否则 \(\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( \texttt{src} - \texttt{delta} )^T\)。该函数用于计算协方差矩阵。当 delta 为零时,它可以作为通用矩阵乘积 A*B(当 B=A' 时)的更快替代方案。- 参数
src- 输入单通道矩阵。注意,与 gemm 不同,该函数不仅可以乘以浮点矩阵。dst- 输出方阵。aTa- 指定乘法顺序的标志。请参阅下面的说明。delta- 乘法前从 src 中减去的可选增量矩阵。当矩阵为空(delta=noArray())时,假设为零,即不减去任何内容。如果它与 src 大小相同,则直接减去。否则,它将被“重复”(见 repeat)以覆盖整个 src 然后减去。当 delta 矩阵不为空时,其类型必须与创建的输出矩阵的类型相同。请参阅下面的 dtype 参数说明。scale- 矩阵乘积的可选缩放因子。否则,它的类型将是 type=CV_MAT_DEPTH(dtype),应为 CV_32F 或 CV_64F。 参阅:calcCovarMatrix, gemm, repeat, reduce
-
mulTransposed
public static void mulTransposed(Mat src, Mat dst, boolean aTa, Mat delta)
计算矩阵及其转置的乘积。cv::mulTransposed 函数计算 src 及其转置的乘积:如果 aTa=true,则 \(\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )\),否则 \(\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( \texttt{src} - \texttt{delta} )^T\)。该函数用于计算协方差矩阵。当 delta 为零时,它可以作为通用矩阵乘积 A*B(当 B=A' 时)的更快替代方案。- 参数
src- 输入单通道矩阵。注意,与 gemm 不同,该函数不仅可以乘以浮点矩阵。dst- 输出方阵。aTa- 指定乘法顺序的标志。请参阅下面的说明。delta- 乘法前从 src 中减去的可选增量矩阵。当矩阵为空(delta=noArray())时,假设为零,即不减去任何内容。如果它与 src 大小相同,则直接减去。否则,它将被“重复”(见 repeat)以覆盖整个 src 然后减去。当 delta 矩阵不为空时,其类型必须与创建的输出矩阵的类型相同。请参阅下面的 dtype 参数说明。否则,它的类型将是 type=CV_MAT_DEPTH(dtype),应为 CV_32F 或 CV_64F。 参阅:calcCovarMatrix, gemm, repeat, reduce
-
mulTransposed
public static void mulTransposed(Mat src, Mat dst, boolean aTa)
计算矩阵及其转置的乘积。cv::mulTransposed 函数计算 src 及其转置的乘积:如果 aTa=true,则 \(\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( \texttt{src} - \texttt{delta} )\),否则 \(\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( \texttt{src} - \texttt{delta} )^T\)。该函数用于计算协方差矩阵。当 delta 为零时,它可以作为通用矩阵乘积 A*B(当 B=A' 时)的更快替代方案。- 参数
src- 输入单通道矩阵。注意,与 gemm 不同,该函数不仅可以乘以浮点矩阵。dst- 输出方阵。aTa- 指定乘法顺序的标志。请参阅下面的说明。否则,它的类型将是 type=CV_MAT_DEPTH(dtype),应为 CV_32F 或 CV_64F。 参阅:calcCovarMatrix, gemm, repeat, reduce
-
transpose
public static void transpose(Mat src, Mat dst)
转置矩阵。cv::transpose 函数转置矩阵 src:\(\texttt{dst} (i,j) = \texttt{src} (j,i)\)。注意: 对于复数矩阵不进行共轭处理。如果需要,应单独进行。- 参数
src- 输入数组。dst- 与 src 类型相同的输出数组。
-
transposeND
public static void transposeND(Mat src, MatOfInt order, Mat dst)
n 维矩阵的转置。注意: 输入应为连续的单通道矩阵。- 参数
src- 输入数组。order- [0,1,..,N-1] 的排列,其中 N 是 src 的轴数。dst 的第 i 个轴将对应于输入的编号为 order[i] 的轴。dst- 与 src 类型相同的输出数组。
-
transform
public static void transform(Mat src, Mat dst, Mat m)
对每个数组元素执行矩阵转换。cv::transform 函数对数组 src 的每个元素执行矩阵转换,并将结果存储在 dst 中:\(\texttt{dst} (I) = \texttt{m} \cdot \texttt{src} (I)\)(当 m.cols=src.channels() 时),或 \(\texttt{dst} (I) = \texttt{m} \cdot [ \texttt{src} (I); 1]\)(当 m.cols=src.channels()+1 时)。N 通道数组 src 的每个元素被解释为 N 元向量,使用 M x N 或 M x (N+1) 矩阵 m 将其转换为 M 元向量——即输出数组 dst 的相应元素。该函数可用于 N 维点的几何变换、任意线性色彩空间转换(例如各种 RGB 到 YUV 的转换)、打乱图像通道等。- 参数
src- 输入数组,其通道数(1 到 4)必须与 m.cols 或 m.cols-1 相同。dst- 与 src 大小和深度相同的输出数组;其通道数与 m.rows 相同。m- 2x2 或 2x3 的浮点变换矩阵。 参阅:perspectiveTransform, getAffineTransform, estimateAffine2D, warpAffine, warpPerspective
-
perspectiveTransform
public static void perspectiveTransform(Mat src, Mat dst, Mat m)
执行向量的透视矩阵变换。cv::perspectiveTransform 函数通过将 src 的每个元素视为二维或三维向量,按以下方式进行变换:\((x, y, z) \rightarrow (x'/w, y'/w, z'/w)\),其中 \((x', y', z', w') = \texttt{mat} \cdot \begin{bmatrix} x & y & z & 1 \end{bmatrix}\) 且 \(w = \fork{w'}{如果 \(w' \ne 0\)}{\infty}{否则}\)。这里显示的是三维向量变换。在二维向量变换的情况下,省略 z 分量。注意: 该函数变换一组稀疏的二维或三维向量。如果您想使用透视变换来变换图像,请使用 warpPerspective。如果您遇到逆问题,即想从几对对应点中计算出最可能的透视变换,可以使用 getPerspectiveTransform 或 findHomography。- 参数
src- 输入双通道或三通道浮点数组;每个元素都是要变换的 2D/3D 向量。dst- 与 src 大小和类型相同的输出数组。m- 3x3 或 4x4 浮点变换矩阵。 参阅:transform, warpPerspective, getPerspectiveTransform, findHomography
-
completeSymm
public static void completeSymm(Mat m, boolean lowerToUpper)
将方阵的下半部分或上半部分复制到其另一半。cv::completeSymm 函数将方阵的下半部分或上半部分复制到其另一半。矩阵对角线保持不变。- 如果 lowerToUpper=false,则对于 \(i > j\) 有 \(\texttt{m}_{ij}=\texttt{m}_{ji}\)
- 如果 lowerToUpper=true,则对于 \(i < j\) 有 \(\texttt{m}_{ij}=\texttt{m}_{ji}\)
- 参数
m- 输入-输出浮点方阵。lowerToUpper- 操作标志;如果为 true,则将下半部分复制到上半部分。否则,将上半部分复制到下半部分。 参阅:flip, transpose
-
completeSymm
public static void completeSymm(Mat m)
将方阵的下半部分或上半部分复制到其另一半。cv::completeSymm 函数将方阵的下半部分或上半部分复制到其另一半。矩阵对角线保持不变。- 如果 lowerToUpper=false,则对于 \(i > j\) 有 \(\texttt{m}_{ij}=\texttt{m}_{ji}\)
- 如果 lowerToUpper=true,则对于 \(i < j\) 有 \(\texttt{m}_{ij}=\texttt{m}_{ji}\)
- 参数
m- 输入-输出浮点方阵。否则,将上半部分复制到下半部分。 参阅:flip, transpose
-
setIdentity
public static void setIdentity(Mat mtx, Scalar s)
初始化缩放单位矩阵。cv::setIdentity 函数初始化一个缩放单位矩阵:\(\texttt{mtx} (i,j)= \fork{\texttt{value}}{ if \(i=j\)}{0}{否则}\)。该函数也可以使用矩阵初始化器和矩阵表达式来模拟:Mat A = Mat::eye(4, 3, CV_32F)*5; // A 将被设置为 [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]]- 参数
mtx- 要初始化的矩阵(不一定是方阵)。s- 分配给对角线元素的值。 参阅:Mat::zeros, Mat::ones, Mat::setTo, Mat::operator=
-
setIdentity
public static void setIdentity(Mat mtx)
初始化缩放单位矩阵。cv::setIdentity 函数初始化一个缩放单位矩阵:\(\texttt{mtx} (i,j)= \fork{\texttt{value}}{ if \(i=j\)}{0}{否则}\)。该函数也可以使用矩阵初始化器和矩阵表达式来模拟:Mat A = Mat::eye(4, 3, CV_32F)*5; // A 将被设置为 [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]]- 参数
mtx- 要初始化的矩阵(不一定是方阵)。 参阅:Mat::zeros, Mat::ones, Mat::setTo, Mat::operator=
-
determinant
public static double determinant(Mat mtx)
返回浮点方阵的行列式。cv::determinant 函数计算并返回指定矩阵的行列式。对于小矩阵 ( mtx.cols=mtx.rows<=3 ),使用直接法。对于较大的矩阵,函数使用部分主元消去法的 LU 分解。对于对称正定矩阵,也可以使用特征值分解来计算行列式。- 参数
mtx- 输入矩阵,必须具有 CV_32FC1 或 CV_64FC1 类型且为方阵大小。 参阅:trace, invert, solve, eigen, 参考:MatrixExpressions- 返回
- 自动生成
-
trace
public static Scalar trace(Mat mtx)
返回矩阵的迹。cv::trace 函数返回矩阵 mtx 对角线元素的总和。\(\mathrm{tr} ( \texttt{mtx} ) = \sum _i \texttt{mtx} (i,i)\)- 参数
mtx- 输入矩阵。- 返回
- 自动生成
-
invert
public static double invert(Mat src, Mat dst, int flags)
求矩阵的逆或伪逆。cv::invert 函数对矩阵 src 求逆并将结果存储在 dst 中。当矩阵 src 是奇异矩阵或非方阵时,函数计算伪逆矩阵(dst 矩阵),使得 norm(src*dst - I) 最小,其中 I 是单位矩阵。在 #DECOMP_LU 方法的情况下,如果成功计算出逆矩阵,函数返回非零值,如果 src 是奇异的,则返回 0。在 #DECOMP_SVD 方法的情况下,函数返回 src 的逆条件数(最小奇异值与最大奇异值的比率),如果 src 是奇异的,则返回 0。如果 src 是奇异的,SVD 方法会计算伪逆矩阵。与 #DECOMP_LU 类似,#DECOMP_CHOLESKY 方法仅适用于非奇异方阵,且该方阵还应是对称正定的。在这种情况下,函数将逆矩阵存储在 dst 中并返回非零。否则返回 0。- 参数
src- 输入浮点型 M x N 矩阵。dst- N x M 大小的输出矩阵,类型与 src 相同。flags- 求逆方法 (cv::DecompTypes) 参阅:solve, SVD- 返回
- 自动生成
-
invert
public static double invert(Mat src, Mat dst)
求矩阵的逆或伪逆。cv::invert 函数对矩阵 src 求逆并将结果存储在 dst 中。当矩阵 src 是奇异矩阵或非方阵时,函数计算伪逆矩阵(dst 矩阵),使得 norm(src*dst - I) 最小,其中 I 是单位矩阵。在 #DECOMP_LU 方法的情况下,如果成功计算出逆矩阵,函数返回非零值,如果 src 是奇异的,则返回 0。在 #DECOMP_SVD 方法的情况下,函数返回 src 的逆条件数(最小奇异值与最大奇异值的比率),如果 src 是奇异的,则返回 0。如果 src 是奇异的,SVD 方法会计算伪逆矩阵。与 #DECOMP_LU 类似,#DECOMP_CHOLESKY 方法仅适用于非奇异方阵,且该方阵还应是对称正定的。在这种情况下,函数将逆矩阵存储在 dst 中并返回非零。否则返回 0。- 参数
src- 输入浮点型 M x N 矩阵。dst- N x M 大小的输出矩阵,类型与 src 相同。 参阅:solve, SVD- 返回
- 自动生成
-
solve
public static boolean solve(Mat src1, Mat src2, Mat dst, int flags)
求解一个或多个线性系统或最小二乘问题。cv::solve 函数求解线性系统或最小二乘问题(后者可以通过 SVD 或 QR 方法,或通过指定标志 #DECOMP_NORMAL 实现):\(\texttt{dst} = \arg \min _X \| \texttt{src1} \cdot \texttt{X} - \texttt{src2} \|\)。如果使用 #DECOMP_LU 或 #DECOMP_CHOLESKY 方法,如果 src1(或 \(\texttt{src1}^T\texttt{src1}\))是非奇异的,函数返回 1。否则返回 0。在后一种情况下,dst 是无效的。其他方法在左侧部分为奇异的情况下寻找伪解。注意: 如果您想寻找欠定奇异系统 \(\texttt{src1}\cdot\texttt{dst}=0\) 的单位范数解,solve 函数将无法胜任。请改用 SVD::solveZ。- 参数
src1- 系统左侧的输入矩阵。src2- 系统右侧的输入矩阵。dst- 输出解。flags- 求解(矩阵求逆)方法 (#DecompTypes) 参阅:invert, SVD, eigen- 返回
- 自动生成
-
solve
public static boolean solve(Mat src1, Mat src2, Mat dst)
求解一个或多个线性系统或最小二乘问题。cv::solve 函数求解线性系统或最小二乘问题(后者可以通过 SVD 或 QR 方法,或通过指定标志 #DECOMP_NORMAL 实现):\(\texttt{dst} = \arg \min _X \| \texttt{src1} \cdot \texttt{X} - \texttt{src2} \|\)。如果使用 #DECOMP_LU 或 #DECOMP_CHOLESKY 方法,如果 src1(或 \(\texttt{src1}^T\texttt{src1}\))是非奇异的,函数返回 1。否则返回 0。在后一种情况下,dst 是无效的。其他方法在左侧部分为奇异的情况下寻找伪解。注意: 如果您想寻找欠定奇异系统 \(\texttt{src1}\cdot\texttt{dst}=0\) 的单位范数解,solve 函数将无法胜任。请改用 SVD::solveZ。- 参数
src1- 系统左侧的输入矩阵。src2- 系统右侧的输入矩阵。dst- 输出解。 参阅:invert, SVD, eigen- 返回
- 自动生成
-
sort
public static void sort(Mat src, Mat dst, int flags)
对矩阵的每一行或每一列进行排序。cv::sort 函数按升序或降序对每个矩阵行或每个矩阵列进行排序。因此,您应该传递两个操作标志以获得所需的行为。如果您想按字典顺序对矩阵行或列进行排序,可以使用带有适当比较谓词的 STL std::sort 通用函数。- 参数
src- 输入单通道数组。dst- 与 src 大小和类型相同的输出数组。flags- 操作标志,#SortFlags 的组合。 参阅:sortIdx, randShuffle
-
sortIdx
public static void sortIdx(Mat src, Mat dst, int flags)
对矩阵的每一行或每一列进行排序。cv::sortIdx 函数按升序或降序对每个矩阵行或每个矩阵列进行排序。因此,您应该传递两个操作标志以获得所需的行为。它不是重新排列元素本身,而是将排序后元素的索引存储在输出数组中。例如:Mat A = Mat::eye(3,3,CV_32F), B; sortIdx(A, B, SORT_EVERY_ROW + SORT_ASCENDING); // B 可能会包含 // (由于 A 中有相等的元素,可能会有一些排列): // [[1, 2, 0], [0, 2, 1], [0, 1, 2]]- 参数
src- 输入单通道数组。dst- 与 src 大小相同的输出整数数组。flags- 操作标志,可以是 cv::SortFlags 的组合。 参阅:sort, randShuffle
-
solveCubic
public static int solveCubic(Mat coeffs, Mat roots)
求三次方程的实根。solveCubic 函数求三次方程的实根- 如果 coeffs 是 4 元素向量:\(\texttt{coeffs} [0] x^3 + \texttt{coeffs} [1] x^2 + \texttt{coeffs} [2] x + \texttt{coeffs} [3] = 0\)
- 如果 coeffs 是 3 元素向量:\(x^3 + \texttt{coeffs} [0] x^2 + \texttt{coeffs} [1] x + \texttt{coeffs} [2] = 0\)
- 参数
coeffs- 方程系数,一个包含 3 或 4 个元素的数组。roots- 具有 0、1、2 或 3 个元素的实根输出数组。- 返回
- 实根的数量。它可以是 -1(所有实数)、0、1、2 或 3。
-
solvePoly
public static double solvePoly(Mat coeffs, Mat roots, int maxIters)
求多项式方程的实根或复根。cv::solvePoly 函数求多项式方程的实根和复根:\(\texttt{coeffs} [n] x^{n} + \texttt{coeffs} [n-1] x^{n-1} + ... + \texttt{coeffs} [1] x + \texttt{coeffs} [0] = 0\)- 参数
coeffs- 多项式系数数组。roots- 输出(复数)根数组。maxIters- 算法执行的最大迭代次数。- 返回
- 自动生成
-
solvePoly
public static double solvePoly(Mat coeffs, Mat roots)
求多项式方程的实根或复根。cv::solvePoly 函数求多项式方程的实根和复根:\(\texttt{coeffs} [n] x^{n} + \texttt{coeffs} [n-1] x^{n-1} + ... + \texttt{coeffs} [1] x + \texttt{coeffs} [0] = 0\)- 参数
coeffs- 多项式系数数组。roots- 输出(复数)根数组。- 返回
- 自动生成
-
eigen
public static boolean eigen(Mat src, Mat eigenvalues, Mat eigenvectors)
计算对称矩阵的特征值和特征向量。cv::eigen 函数计算对称矩阵 src 的特征值,或者特征值和特征向量:src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()注意: 使用 cv::eigenNonSymmetric 计算非对称矩阵的实特征值和特征向量。- 参数
src- 输入矩阵,必须具有 CV_32FC1 或 CV_64FC1 类型,方阵大小且对称 (src ^T^ == src)。eigenvalues- 与 src 类型相同的特征值输出向量;特征值按降序存储。eigenvectors- 特征向量的输出矩阵;它具有与 src 相同的大小和类型;特征向量作为后续矩阵行存储,顺序与相应的特征值相同。 参阅:eigenNonSymmetric, completeSymm, PCA- 返回
- 自动生成
-
eigen
public static boolean eigen(Mat src, Mat eigenvalues)
计算对称矩阵的特征值和特征向量。cv::eigen 函数计算对称矩阵 src 的特征值,或者特征值和特征向量:src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()注意: 使用 cv::eigenNonSymmetric 计算非对称矩阵的实特征值和特征向量。- 参数
src- 输入矩阵,必须具有 CV_32FC1 或 CV_64FC1 类型,方阵大小且对称 (src ^T^ == src)。eigenvalues- 与 src 类型相同的特征值输出向量;特征值按降序存储。特征向量作为后续矩阵行存储,顺序与相应的特征值相同。 参阅:eigenNonSymmetric, completeSymm, PCA- 返回
- 自动生成
-
eigenNonSymmetric
public static void eigenNonSymmetric(Mat src, Mat eigenvalues, Mat eigenvectors)
计算非对称矩阵的特征值和特征向量(仅限实特征值)。注意: 假设为实特征值。该函数计算方阵 src 的特征值和特征向量(可选):src*eigenvectors.row(i).t() = eigenvalues.at<srcType>(i)*eigenvectors.row(i).t()- 参数
src- 输入矩阵(CV_32FC1 或 CV_64FC1 类型)。eigenvalues- 特征值输出向量(类型与 src 相同)。eigenvectors- 特征向量输出矩阵(类型与 src 相同)。特征向量作为后续矩阵行存储,顺序与相应的特征值相同。 参阅:eigen
-
calcCovarMatrix
public static void calcCovarMatrix(Mat samples, Mat covar, Mat mean, int flags, int ctype)
注意: 使用 #COVAR_ROWS 或 #COVAR_COLS 标志- 参数
samples- 存储为单矩阵行/列的样本。covar- ctype 类型且为方阵大小的输出协方差矩阵。mean- 作为输入向量平均值的输入或输出数组(取决于标志)。flags- 作为 #CovarFlags 组合的操作标志ctype- 矩阵类型;默认等于 'CV_64F'。
-
calcCovarMatrix
public static void calcCovarMatrix(Mat samples, Mat covar, Mat mean, int flags)
注意: 使用 #COVAR_ROWS 或 #COVAR_COLS 标志- 参数
samples- 存储为单矩阵行/列的样本。covar- ctype 类型且为方阵大小的输出协方差矩阵。mean- 作为输入向量平均值的输入或输出数组(取决于标志)。flags- 作为 #CovarFlags 组合的操作标志
-
PCACompute
public static void PCACompute(Mat data, Mat mean, Mat eigenvectors, int maxComponents)
封装 PCA::operator()- 参数
data- 自动生成mean- 自动生成eigenvectors- 自动生成maxComponents- 自动生成
-
PCACompute
public static void PCACompute(Mat data, Mat mean, Mat eigenvectors)
封装 PCA::operator()- 参数
data- 自动生成mean- 自动生成eigenvectors- 自动生成
-
PCACompute2
public static void PCACompute2(Mat data, Mat mean, Mat eigenvectors, Mat eigenvalues, int maxComponents)
封装 PCA::operator() 并增加 eigenvalues 输出参数- 参数
data- 自动生成mean- 自动生成eigenvectors- 自动生成eigenvalues- 自动生成maxComponents- 自动生成
-
PCACompute2
public static void PCACompute2(Mat data, Mat mean, Mat eigenvectors, Mat eigenvalues)
封装 PCA::operator() 并增加 eigenvalues 输出参数- 参数
data- 自动生成mean- 自动生成eigenvectors- 自动生成eigenvalues- 自动生成
-
PCACompute
public static void PCACompute(Mat data, Mat mean, Mat eigenvectors, double retainedVariance)
封装 PCA::operator()- 参数
data- 自动生成mean- 自动生成eigenvectors- 自动生成retainedVariance- 自动生成
-
PCACompute2
public static void PCACompute2(Mat data, Mat mean, Mat eigenvectors, Mat eigenvalues, double retainedVariance)
封装 PCA::operator() 并增加 eigenvalues 输出参数- 参数
data- 自动生成mean- 自动生成eigenvectors- 自动生成eigenvalues- 自动生成retainedVariance- 自动生成
-
PCAProject
public static void PCAProject(Mat data, Mat mean, Mat eigenvectors, Mat result)
包装 PCA::project- 参数
data- 自动生成mean- 自动生成eigenvectors- 自动生成result- 自动生成
-
PCABackProject
public static void PCABackProject(Mat data, Mat mean, Mat eigenvectors, Mat result)
包装 PCA::backProject- 参数
data- 自动生成mean- 自动生成eigenvectors- 自动生成result- 自动生成
-
SVDecomp
public static void SVDecomp(Mat src, Mat w, Mat u, Mat vt, int flags)
包装 SVD::compute- 参数
src- 自动生成w- 自动生成u- 自动生成vt- 自动生成flags- 自动生成
-
SVDecomp
public static void SVDecomp(Mat src, Mat w, Mat u, Mat vt)
包装 SVD::compute- 参数
src- 自动生成w- 自动生成u- 自动生成vt- 自动生成
-
SVBackSubst
public static void SVBackSubst(Mat w, Mat u, Mat vt, Mat rhs, Mat dst)
包装 SVD::backSubst- 参数
w- 自动生成u- 自动生成vt- 自动生成rhs- 自动生成dst- 自动生成
-
Mahalanobis
public static double Mahalanobis(Mat v1, Mat v2, Mat icovar)
计算两个向量之间的马哈拉诺比斯距离(Mahalanobis distance)。cv::Mahalanobis 函数计算并返回两个向量之间的加权距离:\(d( \texttt{vec1} , \texttt{vec2} )= \sqrt{\sum_{i,j}{\texttt{icovar(i,j)}\cdot(\texttt{vec1}(I)-\texttt{vec2}(I))\cdot(\texttt{vec1(j)}-\texttt{vec2(j)})} }\)。协方差矩阵可以使用 #calcCovarMatrix 函数计算,然后使用 invert 函数求逆(建议使用 #DECOMP_SVD 方法,因为它最准确)。- 参数
v1- 第一个一维输入向量。v2- 第二个一维输入向量。icovar- 逆协方差矩阵。- 返回
- 自动生成
-
dft
public static void dft(Mat src, Mat dst, int flags, int nonzeroRows)
对一维或二维浮点数组执行正向或反向离散傅里叶变换。cv::dft 函数执行以下操作之一:- 对 N 个元素的一维向量进行正向傅里叶变换:\(Y = F^{(N)} \cdot X,\) 其中 \(F^{(N)}_{jk}=\exp(-2\pi i j k/N)\) 且 \(i=\sqrt{-1}\)
- 对 N 个元素的一维向量进行反向傅里叶变换:\(\begin{array}{l} X'= \left (F^{(N)} \right )^{-1} \cdot Y = \left (F^{(N)} \right )^* \cdot y \\ X = (1/N) \cdot X, \end{array}\) 其中 \(F^*=\left(\textrm{Re}(F^{(N)})-\textrm{Im}(F^{(N)})\right)^T\)
- 对 M x N 矩阵进行二维正向傅里叶变换:\(Y = F^{(M)} \cdot X \cdot F^{(N)}\)
- 对 M x N 矩阵进行二维反向傅里叶变换:\(\begin{array}{l} X'= \left (F^{(M)} \right )^* \cdot Y \cdot \left (F^{(N)} \right )^* \\ X = \frac{1}{M \cdot N} \cdot X' \end{array}\)
- 如果设置了 #DFT_ROWS 或者输入数组只有单行或单列,当设置了 #DFT_ROWS 时,函数会对矩阵的每一行执行一维正向或反向变换。否则,它执行二维变换。
- 如果输入数组是实数且未设置 #DFT_INVERSE,函数执行正向一维或二维变换
- 当设置了 #DFT_COMPLEX_OUTPUT 时,输出是与输入大小相同的复数矩阵。
- 当未设置 #DFT_COMPLEX_OUTPUT 时,输出是与输入大小相同的实数矩阵。在二维变换的情况下,它使用如上所示的压缩格式。在单个一维变换的情况下,它看起来像上面矩阵的第一行。在多个一维变换的情况下(使用 #DFT_ROWS 标志时),输出矩阵的每一行看起来都像上面矩阵的第一行。
- 如果输入数组是复数,且未设置 #DFT_INVERSE 或 #DFT_REAL_OUTPUT,则输出是与输入大小相同的复数数组。函数根据标志 DFT_INVERSE 和 DFT_ROWS,独立地对整个输入数组或输入数组的每一行执行正向或反向的一维或二维变换。
- 当设置了 #DFT_INVERSE 且输入数组为实数,或者输入为复数但设置了 #DFT_REAL_OUTPUT 时,输出是与输入大小相同的实数数组。函数根据标志 #DFT_INVERSE 和 #DFT_ROWS,对整个输入数组或每个单独的行执行一维或二维反向变换。
void convolveDFT(InputArray A, InputArray B, OutputArray C) { // 如果需要,重新分配输出数组 C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type()); Size dftSize; // 计算 DFT 变换的大小 dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1); dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1); // 分配临时缓冲区并用 0 初始化它们 Mat tempA(dftSize, A.type(), Scalar::all(0)); Mat tempB(dftSize, B.type(), Scalar::all(0)); // 分别将 A 和 B 复制到 tempA 和 tempB 的左上角 Mat roiA(tempA, Rect(0,0,A.cols,A.rows)); A.copyTo(roiA); Mat roiB(tempB, Rect(0,0,B.cols,B.rows)); B.copyTo(roiB); // 现在就地变换填充后的 A 和 B; // 使用 "nonzeroRows" 提示以加快处理速度 dft(tempA, tempA, 0, A.rows); dft(tempB, tempB, 0, B.rows); // 频谱相乘; // 该函数能很好地处理压缩频谱表示 mulSpectrums(tempA, tempB, tempA); // 将乘积从频域变换回来。 // 即使所有结果行都将是非零的, // 您也只需要其中的前 C.rows 行,因此 // 您传递 nonzeroRows == C.rows dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows); // 现在将结果复制回 C。 tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C); // 所有临时缓冲区将自动释放 }为了优化这个示例,请考虑以下方法:- 由于向正向变换调用传递了 nonzeroRows != 0,并且由于 A 和 B 被分别复制到 tempA 和 tempB 的左上角,因此不需要清除整个 tempA 和 tempB。仅需要清除矩阵最右侧的 tempA.cols - A.cols (tempB.cols - B.cols) 列。
- 这种基于离散傅里叶变换(DFT)的卷积不必应用于整个大数组,特别是当 B 显著小于 A(或反之亦然)时。相反,您可以分部分计算卷积。为此,您需要将输出数组 C 分割成多个分块(tiles)。对于每个分块,估计需要 A 和 B 的哪些部分来计算该分块中的卷积。如果 C 中的分块太小,由于重复工作,速度会大幅下降。在极端情况下,当 C 中的每个分块都是单个像素时,该算法等同于朴素卷积算法。如果分块太大,临时数组 tempA 和 tempB 会变得过大,并且由于缓存局部性变差也会导致速度下降。因此,在中间某个位置存在一个最佳的分块大小。
- 如果 C 中的不同分块可以并行计算,从而实现分部分完成卷积,那么循环可以进行多线程处理。
- 使用离散傅里叶变换的示例可以在 opencv_source_code/samples/cpp/dft.cpp 中找到
- (Python) 使用 dft 功能执行维纳去卷积(Wiener deconvolution)的示例可以在 opencv_source/samples/python/deconvolution.py 中找到
- (Python) 重新排列傅里叶图像象限的示例可以在 opencv_source/samples/python/dft.py 中找到
- 参数
src- 输入数组,可以是实数或复数。dst- 输出数组,其大小和类型取决于标志(flags)。flags- 变换标志,代表 #DftFlags 的组合。nonzeroRows- 当该参数不为零时,函数会假设只有输入数组的前 nonzeroRows 行(未设置 #DFT_INVERSE 时)或只有输出数组的前 nonzeroRows 行(设置了 #DFT_INVERSE 时)包含非零值。因此,函数可以更高效地处理其余行并节省时间;这种技术对于使用 DFT 计算数组互相关或卷积非常有用。参阅:dct, getOptimalDFTSize, mulSpectrums, filter2D, matchTemplate, flip, cartToPolar, magnitude, phase
-
dft
public static void dft(Mat src, Mat dst, int flags)
对一维或二维浮点数组执行正向或反向离散傅里叶变换。cv::dft 函数执行以下操作之一:- 对 N 个元素的一维向量进行正向傅里叶变换:\(Y = F^{(N)} \cdot X,\) 其中 \(F^{(N)}_{jk}=\exp(-2\pi i j k/N)\) 且 \(i=\sqrt{-1}\)
- 对 N 个元素的一维向量进行反向傅里叶变换:\(\begin{array}{l} X'= \left (F^{(N)} \right )^{-1} \cdot Y = \left (F^{(N)} \right )^* \cdot y \\ X = (1/N) \cdot X, \end{array}\) 其中 \(F^*=\left(\textrm{Re}(F^{(N)})-\textrm{Im}(F^{(N)})\right)^T\)
- 对 M x N 矩阵进行二维正向傅里叶变换:\(Y = F^{(M)} \cdot X \cdot F^{(N)}\)
- 对 M x N 矩阵进行二维反向傅里叶变换:\(\begin{array}{l} X'= \left (F^{(M)} \right )^* \cdot Y \cdot \left (F^{(N)} \right )^* \\ X = \frac{1}{M \cdot N} \cdot X' \end{array}\)
- 如果设置了 #DFT_ROWS 或者输入数组只有单行或单列,当设置了 #DFT_ROWS 时,函数会对矩阵的每一行执行一维正向或反向变换。否则,它执行二维变换。
- 如果输入数组是实数且未设置 #DFT_INVERSE,函数执行正向一维或二维变换
- 当设置了 #DFT_COMPLEX_OUTPUT 时,输出是与输入大小相同的复数矩阵。
- 当未设置 #DFT_COMPLEX_OUTPUT 时,输出是与输入大小相同的实数矩阵。在二维变换的情况下,它使用如上所示的压缩格式。在单个一维变换的情况下,它看起来像上面矩阵的第一行。在多个一维变换的情况下(使用 #DFT_ROWS 标志时),输出矩阵的每一行看起来都像上面矩阵的第一行。
- 如果输入数组是复数,且未设置 #DFT_INVERSE 或 #DFT_REAL_OUTPUT,则输出是与输入大小相同的复数数组。函数根据标志 DFT_INVERSE 和 DFT_ROWS,独立地对整个输入数组或输入数组的每一行执行正向或反向的一维或二维变换。
- 当设置了 #DFT_INVERSE 且输入数组为实数,或者输入为复数但设置了 #DFT_REAL_OUTPUT 时,输出是与输入大小相同的实数数组。函数根据标志 #DFT_INVERSE 和 #DFT_ROWS,对整个输入数组或每个单独的行执行一维或二维反向变换。
void convolveDFT(InputArray A, InputArray B, OutputArray C) { // 如果需要,重新分配输出数组 C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type()); Size dftSize; // 计算 DFT 变换的大小 dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1); dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1); // 分配临时缓冲区并用 0 初始化它们 Mat tempA(dftSize, A.type(), Scalar::all(0)); Mat tempB(dftSize, B.type(), Scalar::all(0)); // 分别将 A 和 B 复制到 tempA 和 tempB 的左上角 Mat roiA(tempA, Rect(0,0,A.cols,A.rows)); A.copyTo(roiA); Mat roiB(tempB, Rect(0,0,B.cols,B.rows)); B.copyTo(roiB); // 现在就地变换填充后的 A 和 B; // 使用 "nonzeroRows" 提示以加快处理速度 dft(tempA, tempA, 0, A.rows); dft(tempB, tempB, 0, B.rows); // 频谱相乘; // 该函数能很好地处理压缩频谱表示 mulSpectrums(tempA, tempB, tempA); // 将乘积从频域变换回来。 // 即使所有结果行都将是非零的, // 您也只需要其中的前 C.rows 行,因此 // 您传递 nonzeroRows == C.rows dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows); // 现在将结果复制回 C。 tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C); // 所有临时缓冲区将自动释放 }为了优化这个示例,请考虑以下方法:- 由于向正向变换调用传递了 nonzeroRows != 0,并且由于 A 和 B 被分别复制到 tempA 和 tempB 的左上角,因此不需要清除整个 tempA 和 tempB。仅需要清除矩阵最右侧的 tempA.cols - A.cols (tempB.cols - B.cols) 列。
- 这种基于离散傅里叶变换(DFT)的卷积不必应用于整个大数组,特别是当 B 显著小于 A(或反之亦然)时。相反,您可以分部分计算卷积。为此,您需要将输出数组 C 分割成多个分块(tiles)。对于每个分块,估计需要 A 和 B 的哪些部分来计算该分块中的卷积。如果 C 中的分块太小,由于重复工作,速度会大幅下降。在极端情况下,当 C 中的每个分块都是单个像素时,该算法等同于朴素卷积算法。如果分块太大,临时数组 tempA 和 tempB 会变得过大,并且由于缓存局部性变差也会导致速度下降。因此,在中间某个位置存在一个最佳的分块大小。
- 如果 C 中的不同分块可以并行计算,从而实现分部分完成卷积,那么循环可以进行多线程处理。
- 使用离散傅里叶变换的示例可以在 opencv_source_code/samples/cpp/dft.cpp 中找到
- (Python) 使用 dft 功能执行维纳去卷积(Wiener deconvolution)的示例可以在 opencv_source/samples/python/deconvolution.py 中找到
- (Python) 重新排列傅里叶图像象限的示例可以在 opencv_source/samples/python/dft.py 中找到
- 参数
src- 输入数组,可以是实数或复数。dst- 输出数组,其大小和类型取决于标志(flags)。flags- 变换标志,代表 #DftFlags 的组合。输入数组的前 nonzeroRows 行(未设置 #DFT_INVERSE 时)或只有输出数组的前 nonzeroRows 行(设置了 #DFT_INVERSE 时)包含非零值,因此函数可以更高效地处理其余行并节省时间;这种技术对于使用 DFT 计算数组互相关或卷积非常有用。参阅:dct, getOptimalDFTSize, mulSpectrums, filter2D, matchTemplate, flip, cartToPolar, magnitude, phase
-
dft
public static void dft(Mat src, Mat dst)
对一维或二维浮点数组执行正向或反向离散傅里叶变换。cv::dft 函数执行以下操作之一:- 对 N 个元素的一维向量进行正向傅里叶变换:\(Y = F^{(N)} \cdot X,\) 其中 \(F^{(N)}_{jk}=\exp(-2\pi i j k/N)\) 且 \(i=\sqrt{-1}\)
- 对 N 个元素的一维向量进行反向傅里叶变换:\(\begin{array}{l} X'= \left (F^{(N)} \right )^{-1} \cdot Y = \left (F^{(N)} \right )^* \cdot y \\ X = (1/N) \cdot X, \end{array}\) 其中 \(F^*=\left(\textrm{Re}(F^{(N)})-\textrm{Im}(F^{(N)})\right)^T\)
- 对 M x N 矩阵进行二维正向傅里叶变换:\(Y = F^{(M)} \cdot X \cdot F^{(N)}\)
- 对 M x N 矩阵进行二维反向傅里叶变换:\(\begin{array}{l} X'= \left (F^{(M)} \right )^* \cdot Y \cdot \left (F^{(N)} \right )^* \\ X = \frac{1}{M \cdot N} \cdot X' \end{array}\)
- 如果设置了 #DFT_ROWS 或者输入数组只有单行或单列,当设置了 #DFT_ROWS 时,函数会对矩阵的每一行执行一维正向或反向变换。否则,它执行二维变换。
- 如果输入数组是实数且未设置 #DFT_INVERSE,函数执行正向一维或二维变换
- 当设置了 #DFT_COMPLEX_OUTPUT 时,输出是与输入大小相同的复数矩阵。
- 当未设置 #DFT_COMPLEX_OUTPUT 时,输出是与输入大小相同的实数矩阵。在二维变换的情况下,它使用如上所示的压缩格式。在单个一维变换的情况下,它看起来像上面矩阵的第一行。在多个一维变换的情况下(使用 #DFT_ROWS 标志时),输出矩阵的每一行看起来都像上面矩阵的第一行。
- 如果输入数组是复数,且未设置 #DFT_INVERSE 或 #DFT_REAL_OUTPUT,则输出是与输入大小相同的复数数组。函数根据标志 DFT_INVERSE 和 DFT_ROWS,独立地对整个输入数组或输入数组的每一行执行正向或反向的一维或二维变换。
- 当设置了 #DFT_INVERSE 且输入数组为实数,或者输入为复数但设置了 #DFT_REAL_OUTPUT 时,输出是与输入大小相同的实数数组。函数根据标志 #DFT_INVERSE 和 #DFT_ROWS,对整个输入数组或每个单独的行执行一维或二维反向变换。
void convolveDFT(InputArray A, InputArray B, OutputArray C) { // 如果需要,重新分配输出数组 C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type()); Size dftSize; // 计算 DFT 变换的大小 dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1); dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1); // 分配临时缓冲区并用 0 初始化它们 Mat tempA(dftSize, A.type(), Scalar::all(0)); Mat tempB(dftSize, B.type(), Scalar::all(0)); // 分别将 A 和 B 复制到 tempA 和 tempB 的左上角 Mat roiA(tempA, Rect(0,0,A.cols,A.rows)); A.copyTo(roiA); Mat roiB(tempB, Rect(0,0,B.cols,B.rows)); B.copyTo(roiB); // 现在就地变换填充后的 A 和 B; // 使用 "nonzeroRows" 提示以加快处理速度 dft(tempA, tempA, 0, A.rows); dft(tempB, tempB, 0, B.rows); // 频谱相乘; // 该函数能很好地处理压缩频谱表示 mulSpectrums(tempA, tempB, tempA); // 将乘积从频域变换回来。 // 即使所有结果行都将是非零的, // 您也只需要其中的前 C.rows 行,因此 // 您传递 nonzeroRows == C.rows dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows); // 现在将结果复制回 C。 tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C); // 所有临时缓冲区将自动释放 }为了优化这个示例,请考虑以下方法:- 由于向正向变换调用传递了 nonzeroRows != 0,并且由于 A 和 B 被分别复制到 tempA 和 tempB 的左上角,因此不需要清除整个 tempA 和 tempB。仅需要清除矩阵最右侧的 tempA.cols - A.cols (tempB.cols - B.cols) 列。
- 这种基于离散傅里叶变换(DFT)的卷积不必应用于整个大数组,特别是当 B 显著小于 A(或反之亦然)时。相反,您可以分部分计算卷积。为此,您需要将输出数组 C 分割成多个分块(tiles)。对于每个分块,估计需要 A 和 B 的哪些部分来计算该分块中的卷积。如果 C 中的分块太小,由于重复工作,速度会大幅下降。在极端情况下,当 C 中的每个分块都是单个像素时,该算法等同于朴素卷积算法。如果分块太大,临时数组 tempA 和 tempB 会变得过大,并且由于缓存局部性变差也会导致速度下降。因此,在中间某个位置存在一个最佳的分块大小。
- 如果 C 中的不同分块可以并行计算,从而实现分部分完成卷积,那么循环可以进行多线程处理。
- 使用离散傅里叶变换的示例可以在 opencv_source_code/samples/cpp/dft.cpp 中找到
- (Python) 使用 dft 功能执行维纳去卷积(Wiener deconvolution)的示例可以在 opencv_source/samples/python/deconvolution.py 中找到
- (Python) 重新排列傅里叶图像象限的示例可以在 opencv_source/samples/python/dft.py 中找到
- 参数
src- 输入数组,可以是实数或复数。dst- 输出数组,其大小和类型取决于标志。输入数组的前 nonzeroRows 行(未设置 #DFT_INVERSE 时)或只有输出数组的前 nonzeroRows 行(设置了 #DFT_INVERSE 时)包含非零值,因此函数可以更高效地处理其余行并节省时间;这种技术对于使用 DFT 计算数组互相关或卷积非常有用。参阅:dct, getOptimalDFTSize, mulSpectrums, filter2D, matchTemplate, flip, cartToPolar, magnitude, phase
-
idft
public static void idft(Mat src, Mat dst, int flags, int nonzeroRows)
计算一维或二维数组的离散傅里叶逆变换。idft(src, dst, flags) 等同于 dft(src, dst, flags | #DFT_INVERSE)。注意:默认情况下,dft 和 idft 均不缩放结果。因此,您应当显式地向 dft 或 idft 之一传递 #DFT_SCALE,以使这些变换互为逆变换。参阅:dft, dct, idct, mulSpectrums, getOptimalDFTSize- 参数
src- 输入浮点型实数或复数数组。dst- 输出数组,其大小和类型取决于标志。flags- 操作标志(参见 dft 和 #DftFlags)。nonzeroRows- 要处理的 dst 行数;其余行的内容未定义(参见 dft 说明中的卷积示例)。
-
idft
public static void idft(Mat src, Mat dst, int flags)
计算一维或二维数组的离散傅里叶逆变换。idft(src, dst, flags) 等同于 dft(src, dst, flags | #DFT_INVERSE)。注意:默认情况下,dft 和 idft 均不缩放结果。因此,您应当显式地向 dft 或 idft 之一传递 #DFT_SCALE,以使这些变换互为逆变换。参阅:dft, dct, idct, mulSpectrums, getOptimalDFTSize- 参数
src- 输入浮点型实数或复数数组。dst- 输出数组,其大小和类型取决于标志。flags- 操作标志(参见 dft 和 #DftFlags)。dft 说明中的卷积示例。
-
idft
public static void idft(Mat src, Mat dst)
计算一维或二维数组的离散傅里叶逆变换。idft(src, dst, flags) 等同于 dft(src, dst, flags | #DFT_INVERSE)。注意:默认情况下,dft 和 idft 均不缩放结果。因此,您应当显式地向 dft 或 idft 之一传递 #DFT_SCALE,以使这些变换互为逆变换。参阅:dft, dct, idct, mulSpectrums, getOptimalDFTSize- 参数
src- 输入浮点型实数或复数数组。dst- 输出数组,其大小和类型取决于标志。dft 说明中的卷积示例。
-
dct
public static void dct(Mat src, Mat dst, int flags)
执行一维或二维数组的正向或逆向离散余弦变换。函数 cv::dct 对一维或二维浮点数组执行正向或逆向离散余弦变换 (DCT)。- 含 N 个元素的一维向量的正向余弦变换:\(Y = C^{(N)} \cdot X\),其中 \(C^{(N)}_{jk}= \sqrt{\alpha_j/N} \cos \left ( \frac{\pi(2k+1)j}{2N} \right )\) 且当 *j = 0* 时 \(\alpha_0=1\),当 *j > 0* 时 \(\alpha_j=2\)。
- 含 N 个元素的一维向量的逆余弦变换:\(X = \left (C^{(N)} \right )^{-1} \cdot Y = \left (C^{(N)} \right )^T \cdot Y\)(由于 \(C^{(N)}\) 是正交矩阵,\(C^{(N)} \cdot \left(C^{(N)}\right)^T = I\) )
- M x N 矩阵的正向二维余弦变换:\(Y = C^{(N)} \cdot X \cdot \left (C^{(N)} \right )^T\)
- M x N 矩阵的逆二维余弦变换:\(X = \left (C^{(N)} \right )^T \cdot X \cdot C^{(N)}\)
- 如果 (flags & #DCT_INVERSE) == 0,则函数执行正向一维或二维变换。否则,执行逆一维或二维变换。
- 如果 (flags & #DCT_ROWS) != 0,则函数对每一行执行一维变换。
- 如果数组是单列或单行,则函数执行一维变换。
- 如果以上皆不满足,则函数执行二维变换。
size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); } N1 = getOptimalDCTSize(N);- 参数
src- 输入浮点数组。dst- 输出数组,与 src 具有相同的大小和类型。flags- 变换标志,为 cv::DftFlags (DCT_*) 的组合。参阅:dft, getOptimalDFTSize, idct
-
dct
public static void dct(Mat src, Mat dst)
执行一维或二维数组的正向或逆向离散余弦变换。函数 cv::dct 对一维或二维浮点数组执行正向或逆向离散余弦变换 (DCT)。- 含 N 个元素的一维向量的正向余弦变换:\(Y = C^{(N)} \cdot X\),其中 \(C^{(N)}_{jk}= \sqrt{\alpha_j/N} \cos \left ( \frac{\pi(2k+1)j}{2N} \right )\) 且当 *j = 0* 时 \(\alpha_0=1\),当 *j > 0* 时 \(\alpha_j=2\)。
- 含 N 个元素的一维向量的逆余弦变换:\(X = \left (C^{(N)} \right )^{-1} \cdot Y = \left (C^{(N)} \right )^T \cdot Y\)(由于 \(C^{(N)}\) 是正交矩阵,\(C^{(N)} \cdot \left(C^{(N)}\right)^T = I\) )
- M x N 矩阵的正向二维余弦变换:\(Y = C^{(N)} \cdot X \cdot \left (C^{(N)} \right )^T\)
- M x N 矩阵的逆二维余弦变换:\(X = \left (C^{(N)} \right )^T \cdot X \cdot C^{(N)}\)
- 如果 (flags & #DCT_INVERSE) == 0,则函数执行正向一维或二维变换。否则,执行逆一维或二维变换。
- 如果 (flags & #DCT_ROWS) != 0,则函数对每一行执行一维变换。
- 如果数组是单列或单行,则函数执行一维变换。
- 如果以上皆不满足,则函数执行二维变换。
size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); } N1 = getOptimalDCTSize(N);- 参数
src- 输入浮点数组。dst- 输出数组,与 src 具有相同的大小和类型。参阅:dft, getOptimalDFTSize, idct
-
idct
public static void idct(Mat src, Mat dst, int flags)
计算一维或二维数组的离散余弦逆变换。idct(src, dst, flags) 等同于 dct(src, dst, flags | DCT_INVERSE)。- 参数
src- 输入浮点型单通道数组。dst- 与 src 大小和类型相同的输出数组。flags- 操作标志。参阅:dct, dft, idft, getOptimalDFTSize
-
idct
public static void idct(Mat src, Mat dst)
计算一维或二维数组的离散余弦逆变换。idct(src, dst, flags) 等同于 dct(src, dst, flags | DCT_INVERSE)。- 参数
src- 输入浮点型单通道数组。dst- 输出数组,与 src 具有相同的大小和类型。参阅:dct, dft, idft, getOptimalDFTSize
-
mulSpectrums
public static void mulSpectrums(Mat a, Mat b, Mat c, int flags, boolean conjB)
执行两个傅里叶光谱的逐元素乘法。函数 cv::mulSpectrums 对两个 CCS 压缩或复数矩阵执行逐元素乘法,这些矩阵是实数或复数傅里叶变换的结果。该函数可与 dft 和 idft 配合使用,快速计算两个数组的卷积(传递 conjB=false)或相关(传递 conjB=true)。当数组为复数时,它们直接(按元素)相乘,并可选择对第二个数组的元素进行共轭。当数组为实数时,假设它们是 CCS 压缩的(详见 dft)。- 参数
a- 第一个输入数组。b- 第二个输入数组,与 src1 具有相同的大小和类型。c- 输出数组,与 src1 具有相同的大小和类型。flags- 操作标志;目前唯一支持的标志是 cv::DFT_ROWS,它表示 src1 和 src2 的每一行都是独立的一维傅里叶光谱。如果您不想使用此标志,只需添加0作为值。conjB- 可选标志,指定在乘法前是否对第二个输入数组进行共轭(true)或不进行(false)。
-
mulSpectrums
public static void mulSpectrums(Mat a, Mat b, Mat c, int flags)
执行两个傅里叶光谱的逐元素乘法。函数 cv::mulSpectrums 对两个 CCS 压缩或复数矩阵执行逐元素乘法,这些矩阵是实数或复数傅里叶变换的结果。该函数可与 dft 和 idft 配合使用,快速计算两个数组的卷积(传递 conjB=false)或相关(传递 conjB=true)。当数组为复数时,它们直接(按元素)相乘,并可选择对第二个数组的元素进行共轭。当数组为实数时,假设它们是 CCS 压缩的(详见 dft)。- 参数
a- 第一个输入数组。b- 第二个输入数组,与 src1 具有相同的大小和类型。c- 输出数组,与 src1 具有相同的大小和类型。flags- 操作标志;目前唯一支持的标志是 cv::DFT_ROWS,它表示 src1 和 src2 的每一行都是独立的一维傅里叶光谱。如果您不想使用此标志,只需添加0作为值,或不使用(false)。
-
getOptimalDFTSize
public static int getOptimalDFTSize(int vecsize)
返回给定向量大小的最佳 DFT 大小。DFT 性能不是向量大小的单调函数。因此,当您计算两个数组的卷积或对数组执行频谱分析时,通常有必要用零填充输入数据,以获得一个比原始数组稍大、但变换速度快得多的数组。大小为 2 的幂(2, 4, 8, 16, 32, ...)的数组处理速度最快。不过,大小为 2、3 和 5 的乘积(例如 300 = 5\*5\*3\*2\*2)的数组处理效率也相当高。函数 cv::getOptimalDFTSize 返回大于或等于 vecsize 的最小整数 N,使得大小为 N 的向量的 DFT 可以被高效处理。在当前实现中,对于某些整数 p, q, r,满足 N = 2 ^p^ \* 3 ^q^ \* 5 ^r^。如果 vecsize 过大(非常接近 INT_MAX),该函数返回负数。虽然该函数不能直接用于估计 DCT 变换的最佳向量大小(因为当前的 DCT 实现仅支持偶数大小的向量),但可以轻松处理为 getOptimalDFTSize((vecsize+1)/2)\*2。- 参数
vecsize- 向量大小。参阅:dft, dct, idft, idct, mulSpectrums- 返回
- 自动生成
-
setRNGSeed
public static void setRNGSeed(int seed)
设置默认随机数生成器的状态。函数 cv::setRNGSeed 将默认随机数生成器的状态设置为自定义值。- 参数
seed- 默认随机数生成器的新状态。参阅:RNG, randu, randn
-
randu
public static void randu(Mat dst, double low, double high)
生成单个均匀分布的随机数或随机数数组。该函数的非模板变体使用指定范围内的均匀分布随机数填充矩阵 dst:\(\texttt{low} _c \leq \texttt{dst} (I)_c < \texttt{high} _c\)- 参数
dst- 随机数输出数组;该数组必须预先分配。low- 生成的随机数的包含性下界。high- 生成的随机数的排他性上界。参阅:RNG, randn, theRNG
-
randn
public static void randn(Mat dst, double mean, double stddev)
使用正态分布的随机数填充数组。函数 cv::randn 使用具有指定均值向量和标准差矩阵的正态分布随机数填充矩阵 dst。生成的随机数将被裁剪以符合输出数组数据类型的取值范围。- 参数
dst- 随机数输出数组;该数组必须预先分配并具有 1 到 4 个通道。mean- 生成的随机数的均值(数学期望)。stddev- 生成的随机数的标准差;它可以是一个向量(此时假设为对角标准差矩阵)或一个方阵。参阅:RNG, randu
-
randShuffle
public static void randShuffle(Mat dst, double iterFactor)
随机打乱数组元素。函数 cv::randShuffle 通过随机选择元素对并交换它们来打乱指定的一维数组。此类交换操作的数量将为 dst.rows\*dst.cols\*iterFactor。- 参数
dst- 输入/输出数值型一维数组。iterFactor- 决定随机交换操作数量的比例因子(详见下文)。参阅:RNG, sort
-
randShuffle
public static void randShuffle(Mat dst)
随机打乱数组元素。函数 cv::randShuffle 通过随机选择元素对并交换它们来打乱指定的一维数组。此类交换操作的数量将为 dst.rows\*dst.cols\*iterFactor。- 参数
dst- 输入/输出数值型一维数组。(详见下文)。参阅:RNG, sort
-
kmeans
public static double kmeans(Mat data, int K, Mat bestLabels, TermCriteria criteria, int attempts, int flags, Mat centers)
寻找聚类中心并将输入样本分配到各聚类中。函数 kmeans 实现了 k-means 算法,用于寻找 cluster_count 个聚类的中心并将输入样本聚集在这些中心周围。作为输出,\(\texttt{bestLabels}_i\) 包含了存储在 samples 矩阵第 \(i\) 行的样本的从 0 开始的聚类索引。注意:- (Python) 关于 k-means 聚类的示例可以在 opencv_source_code/samples/python/kmeans.py 中找到
- 参数
data- 用于聚类的数据。需要一个包含浮点坐标的 N 维点数组。此类数组的示例如下:- Mat points(count, 2, CV_32F);
- Mat points(count, 1, CV_32FC2);
- Mat points(1, count, CV_32FC2);
- std::vector<cv::Point2f> points(sampleCount);
K- 划分数据集的聚类数量。bestLabels- 输入/输出整型数组,存储每个样本的聚类索引。criteria- 算法终止条件,即最大迭代次数和/或期望的精度。精度指定为 criteria.epsilon。一旦每个聚类中心在某次迭代中移动的距离小于 criteria.epsilon,算法即停止。attempts- 标志,指定使用不同的初始标记执行算法的次数。算法返回产生最佳紧凑度(参见最后一个函数参数)的标记。flags- 可以取 cv::KmeansFlags 值的标志。centers- 聚类中心的输出矩阵,每个聚类中心占一行。- 返回
- 该函数返回每次尝试后计算的紧凑度度量,计算公式为 \(\sum _i \| \texttt{samples} _i - \texttt{centers} _{ \texttt{labels} _i} \| ^2\)。选择最佳(最小值)值,并由函数返回相应的标记和紧凑度值。基本上,您可以只使用函数的核心部分,将尝试次数设置为 1,每次使用自定义算法初始化标签,并使用 ( flags = #KMEANS_USE_INITIAL_LABELS ) 标志传递它们,然后选择最佳(最紧凑)的聚类。
-
kmeans
public static double kmeans(Mat data, int K, Mat bestLabels, TermCriteria criteria, int attempts, int flags)
寻找聚类中心并将输入样本分配到各聚类中。函数 kmeans 实现了 k-means 算法,用于寻找 cluster_count 个聚类的中心并将输入样本聚集在这些中心周围。作为输出,\(\texttt{bestLabels}_i\) 包含了存储在 samples 矩阵第 \(i\) 行的样本的从 0 开始的聚类索引。注意:- (Python) 关于 k-means 聚类的示例可以在 opencv_source_code/samples/python/kmeans.py 中找到
- 参数
data- 用于聚类的数据。需要一个包含浮点坐标的 N 维点数组。此类数组的示例如下:- Mat points(count, 2, CV_32F);
- Mat points(count, 1, CV_32FC2);
- Mat points(1, count, CV_32FC2);
- std::vector<cv::Point2f> points(sampleCount);
K- 划分数据集的聚类数量。bestLabels- 输入/输出整型数组,存储每个样本的聚类索引。criteria- 算法终止条件,即最大迭代次数和/或期望的精度。精度指定为 criteria.epsilon。一旦每个聚类中心在某次迭代中移动的距离小于 criteria.epsilon,算法即停止。attempts- 标志,指定使用不同的初始标记执行算法的次数。算法返回产生最佳紧凑度(参见最后一个函数参数)的标记。flags- 可以取 cv::KmeansFlags 值的标志。- 返回
- 该函数返回每次尝试后计算的紧凑度度量,计算公式为 \(\sum _i \| \texttt{samples} _i - \texttt{centers} _{ \texttt{labels} _i} \| ^2\)。选择最佳(最小值)值,并由函数返回相应的标记和紧凑度值。基本上,您可以只使用函数的核心部分,将尝试次数设置为 1,每次使用自定义算法初始化标签,并使用 ( flags = #KMEANS_USE_INITIAL_LABELS ) 标志传递它们,然后选择最佳(最紧凑)的聚类。
-
setNumThreads
public static void setNumThreads(int nthreads)
OpenCV 将尝试为随后的并行区域设置线程数。如果 threads == 1,OpenCV 将禁用线程优化并顺序运行所有函数。传递 threads < 0 将把线程数重置为系统默认值。该函数不是线程安全的。不得在并行区域或并发线程中调用它。OpenCV 将尝试使用指定的线程数运行其函数,但某些行为因框架而异-
TBB- 如果未指定其他值,用户定义的并行结构将以相同的线程数运行。如果随后用户创建了自己的调度器,OpenCV 将使用它。 -
OpenMP- 无特殊定义行为。 -
Concurrency- 如果 threads == 1,OpenCV 将禁用线程优化并顺序运行其函数。 -
GCD- 仅支持 <= 0 的值。 -
C=- 无特殊定义行为。
- 参数
nthreads- OpenCV 使用的线程数。参阅:getNumThreads, getThreadNum
-
-
getNumThreads
public static int getNumThreads()
返回 OpenCV 在并行区域中使用的线程数。如果 OpenCV 构建时没有线程支持,则始终返回 1。返回值的确切含义取决于 OpenCV 库使用的线程框架-
TBB- OpenCV 将尝试在并行区域中使用的线程数。如果用户代码中存在任何与 OpenCV 冲突的 tbb::thread_scheduler_init,则函数返回 TBB 库使用的默认线程数。 -
OpenMP- 可用于形成新团队的线程数上限。 -
Concurrency- OpenCV 将尝试在并行区域中使用的线程数。 -
GCD- 不支持;为了兼容性返回 GCD 线程池限制 (512)。 -
C=- 如果之前调用 setNumThreads 且 threads > 0,则为 OpenCV 尝试在并行区域中使用的线程数,否则返回进程可用的逻辑 CPU 数量。参阅:setNumThreads, getThreadNum
- 返回
- 自动生成
-
-
getThreadNum
@Deprecated public static int getThreadNum()
已弃用。当前的实现与此文档不对应。返回值的确切含义取决于 OpenCV 库使用的线程框架-
TBB- 当前 4.1 TBB 版本不支持。未来可能会支持。 -
OpenMP- 调用线程在当前团队中的线程编号。 -
Concurrency- 当前上下文正在其上执行的虚拟处理器的 ID(主线程为 0,其他线程为唯一编号,但不一定是 1,2,3...)。 -
GCD- 系统调用线程的 ID。在并行区域内绝不返回 0。 -
C=- 当前并行任务的索引。参阅:setNumThreads, getNumThreads
返回当前并行区域内当前执行线程的索引。如果在并行区域外调用,则始终返回 0。- 返回
- 自动生成
-
-
getBuildInformation
public static java.lang.String getBuildInformation()
返回完整的配置时间 cmake 输出。返回值为原始 cmake 输出,包括版本控制系统修订版、编译器版本、编译器标志、启用的模块和第三方库等。输出格式取决于目标架构。- 返回
- 自动生成
-
getVersionString
public static java.lang.String getVersionString()
返回库版本字符串。例如 "3.4.1-dev"。参阅:getMajorVersion, getMinorVersion, getRevisionVersion- 返回
- 自动生成
-
getVersionMajor
public static int getVersionMajor()
返回库的主版本号- 返回
- 自动生成
-
getVersionMinor
public static int getVersionMinor()
返回库的次版本号- 返回
- 自动生成
-
getVersionRevision
public static int getVersionRevision()
返回库版本号的修订字段- 返回
- 自动生成
-
getTickCount
public static long getTickCount()
返回滴答数(ticks)。该函数返回特定事件(例如机器开机)后的滴答数。它可用于初始化 RNG 或通过在函数调用前后读取滴答计数来测量函数执行时间。参阅:getTickFrequency, TickMeter- 返回
- 自动生成
-
getTickFrequency
public static double getTickFrequency()
返回每秒的滴答数。该函数返回每秒的滴答数。即,以下代码可计算以秒为单位的执行时间:double t = (double)getTickCount(); // 执行某些操作 ... t = ((double)getTickCount() - t)/getTickFrequency();参阅:getTickCount, TickMeter- 返回
- 自动生成
-
getCPUTickCount
public static long getCPUTickCount()
返回 CPU 滴答数。该函数在某些架构(如 x86、x64、PowerPC)上返回当前的 CPU 滴答数。在其他平台上,该函数等同于 getTickCount。它也可用于非常精确的时间测量以及 RNG 初始化。请注意,在多 CPU 系统的情况下,调用 getCPUTickCount 的线程可能会被挂起并在另一个具有其自身计数器的 CPU 上恢复。因此,理论上(及实际上)后续对该函数的调用不一定返回单调递增的值。此外,由于现代 CPU 会根据负载改变 CPU 频率,因此在某些代码中耗费的 CPU 时钟周期数不能直接转换为时间单位。因此,getTickCount 通常是衡量执行时间的更好方案。- 返回
- 自动生成
-
checkHardwareSupport
public static boolean checkHardwareSupport(int feature)
如果主机硬件支持指定功能,则返回 true。当用户调用 setUseOptimized(false) 时,随后对 checkHardwareSupport() 的调用将返回 false,直到调用 setUseOptimized(true)。通过这种方式,用户可以动态地开启和关闭 OpenCV 中的优化代码。- 参数
feature- 感兴趣的功能,cv::CpuFeatures 之一- 返回
- 自动生成
-
getHardwareFeatureName
public static java.lang.String getHardwareFeatureName(int feature)
通过 ID 返回功能名称。如果未定义该功能,则返回空字符串。- 参数
feature- 自动生成- 返回
- 自动生成
-
getCPUFeaturesLine
public static java.lang.String getCPUFeaturesLine()
返回编译期间启用的 CPU 功能列表。返回值为包含由空格分隔的 CPU 功能列表的字符串,带有以下标记:- 无标记 - 基础功能
- 前缀
*- 在调度器(dispatcher)中启用的功能 - 后缀
?- 已启用但在硬件中不可用的功能
SSE SSE2 SSE3 *SSE4.1 *SSE4.2 *FP16 *AVX *AVX2 *AVX512-SKX?- 返回
- 自动生成
-
getNumberOfCPUs
public static int getNumberOfCPUs()
返回进程可用的逻辑 CPU 数量。- 返回
- 自动生成
-
getDefaultAlgorithmHint
public static int getDefaultAlgorithmHint()
-
setUseOptimized
public static void setUseOptimized(boolean onoff)
启用或禁用优化代码。该函数可用于动态开启和关闭优化的调度代码(在支持的平台上使用 SSE4.2、AVX/AVX2 和其他指令的代码)。它设置一个全局标志,供 OpenCV 函数进一步检查。由于该标志不在 OpenCV 内部循环中检查,因此仅在应用程序的最顶层调用该函数是安全的,此时您可以确保当前没有其他 OpenCV 函数在执行。默认情况下,除非您在 CMake 中禁用,否则优化代码是启用的。当前状态可以通过 useOptimized 获取。- 参数
onoff- 布尔标志,指定是否应使用优化代码(onoff=true)或不使用(onoff=false)。
-
useOptimized
public static boolean useOptimized()
返回优化代码的使用状态。如果启用了优化代码,函数返回 true。否则返回 false。- 返回
- 自动生成
-
findFile
public static java.lang.String findFile(java.lang.String relative_path, boolean required, boolean silentMode)尝试查找请求的数据文件。搜索目录:1. 通过addSamplesDataSearchPath()传递的目录 2. OPENCV_SAMPLES_DATA_PATH_HINT 环境变量 3. OPENCV_SAMPLES_DATA_PATH 环境变量 如果参数值不为空且未找到任何内容,则停止搜索。 4. 基于以下各项检测构建/安装路径:a. 当前工作目录 (CWD) b. 和/或二进制模块位置 (opencv_core/opencv_world,不适用于静态链接) 5. 如果检测到构建目录或当前目录在源码树中,则扫描<source>/{,data,samples/data}目录。 6. 如果检测到安装目录,则扫描<install>/share/OpenCV目录。参阅:cv::utils::findDataFile- 参数
relative_path- 数据文件的相对路径required- 指定“文件未找到”的处理方式。如果为 true,函数打印信息消息并抛出 cv::Exception。如果为 false,函数返回空结果silentMode- 禁用消息- 返回
- 返回路径(绝对路径或相对于当前目录的路径),如果未找到文件则返回空字符串
-
findFile
public static java.lang.String findFile(java.lang.String relative_path, boolean required)尝试查找请求的数据文件。搜索目录:1. 通过addSamplesDataSearchPath()传递的目录 2. OPENCV_SAMPLES_DATA_PATH_HINT 环境变量 3. OPENCV_SAMPLES_DATA_PATH 环境变量 如果参数值不为空且未找到任何内容,则停止搜索。 4. 基于以下各项检测构建/安装路径:a. 当前工作目录 (CWD) b. 和/或二进制模块位置 (opencv_core/opencv_world,不适用于静态链接) 5. 如果检测到构建目录或当前目录在源码树中,则扫描<source>/{,data,samples/data}目录。 6. 如果检测到安装目录,则扫描<install>/share/OpenCV目录。参阅:cv::utils::findDataFile- 参数
relative_path- 数据文件的相对路径required- 指定“文件未找到”的处理方式。如果为 true,函数打印信息消息并抛出 cv::Exception。如果为 false,函数返回空结果- 返回
- 返回路径(绝对路径或相对于当前目录的路径),如果未找到文件则返回空字符串
-
findFile
public static java.lang.String findFile(java.lang.String relative_path)
尝试查找请求的数据文件。搜索目录:1. 通过addSamplesDataSearchPath()传递的目录 2. OPENCV_SAMPLES_DATA_PATH_HINT 环境变量 3. OPENCV_SAMPLES_DATA_PATH 环境变量 如果参数值不为空且未找到任何内容,则停止搜索。 4. 基于以下各项检测构建/安装路径:a. 当前工作目录 (CWD) b. 和/或二进制模块位置 (opencv_core/opencv_world,不适用于静态链接) 5. 如果检测到构建目录或当前目录在源码树中,则扫描<source>/{,data,samples/data}目录。 6. 如果检测到安装目录,则扫描<install>/share/OpenCV目录。参阅:cv::utils::findDataFile- 参数
relative_path- 数据文件的相对路径。如果为 true,函数打印信息消息并抛出 cv::Exception。如果为 false,函数返回空结果- 返回
- 返回路径(绝对路径或相对于当前目录的路径),如果未找到文件则返回空字符串
-
findFileOrKeep
public static java.lang.String findFileOrKeep(java.lang.String relative_path, boolean silentMode)
-
findFileOrKeep
public static java.lang.String findFileOrKeep(java.lang.String relative_path)
-
addSamplesDataSearchPath
public static void addSamplesDataSearchPath(java.lang.String path)
通过添加新的搜索位置来覆盖搜索数据路径。仅在需要覆盖默认行为时使用。传递的路径按后进先出(LIFO)顺序使用。- 参数
path- 使用的样本数据路径
-
addSamplesDataSearchSubDirectory
public static void addSamplesDataSearchSubDirectory(java.lang.String subdir)
追加样本搜索数据子目录。通用用法是添加 OpenCV 模块名称 (<opencv_contrib>/modules/<name>/samples/data-><name>/samples/data+modules/<name>/samples/data)。传递的子目录按后进先出 (LIFO) 顺序使用。- 参数
subdir- 样本数据子目录
-
setErrorVerbosity
public static void setErrorVerbosity(boolean verbose)
-
minMaxLoc
public static Core.MinMaxLocResult minMaxLoc(Mat src, Mat mask)
-
minMaxLoc
public static Core.MinMaxLocResult minMaxLoc(Mat src)
-
-