Mat中的一些函数(core.cpp)

本文介绍了OpenCV中矩阵的基本操作,包括加减乘除、求和、求平均值等,并详细解释了高斯模糊、腐蚀与膨胀等图像处理技术的具体应用及参数设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//! swaps two matrices  交换矩阵 
CV_EXPORTS void swap(Mat& a, Mat& b); 

//! converts array (CvMat or IplImage) to cv::Mat 
将CvMat或者IplImage装换为Mat 
CV_EXPORTS Mat cvarrToMat(const CvArr* arr, bool copyData=false, 
                          bool allowND=true, int coiMode=0); 


//! extracts Channel of Interest from CvMat or IplImage and makes cv::Mat out of it. 
提取CvMat或者IplImage中的感兴趣通道,并以Mat输出 
CV_EXPORTS void extractImageCOI(const CvArr* arr, OutputArray coiimg, int coi=-1); 


//! inserts single-channel cv::Mat into a multi-channel CvMat or IplImage 
将单通道Mat插入CvMat或者IplImage中 
CV_EXPORTS void insertImageCOI(InputArray coiimg, CvArr* arr, int coi=-1); 


//! adds one matrix to another (dst = src1 + src2) 
两矩阵相加 
CV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst, 
                      InputArray mask=noArray(), int dtype=-1); 


//! subtracts one matrix from another (dst = src1 - src2) 
两矩阵相减 
CV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst,
                           InputArray mask=noArray(), int dtype=-1); 

//! computes element-wise weighted product of the two arrays (dst = scale*src1*src2) 
计算两矩阵的加权积,权值默认为1 
CV_EXPORTS_W void multiply(InputArray src1, InputArray src2, 
                           OutputArray dst, double scale=1, int dtype=-1); 

//! computes element-wise weighted quotient of the two arrays (dst = scale*src1/src2) 
计算两矩阵的加权商,权值默认为1 
CV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst, 
                         double scale=1, int dtype=-1); 

//! computes element-wise weighted reciprocal of an array (dst = scale/src2) 
计算加权倒数,权值默认为1 
CV_EXPORTS_W void divide(double scale, InputArray src2, 
                         OutputArray dst, int dtype=-1); 

//! computes sum of array elements 
计算矩阵内所有元素总和 
CV_EXPORTS_AS(sumElems) Scalar sum(InputArray src); 

//! computes the number of nonzero array elements 
计算矩阵内非零元素个数 
CV_EXPORTS_W int countNonZero( InputArray src ); 

//! computes mean value of selected array elements 
计算所选矩阵的均值 
CV_EXPORTS_W Scalar mean(InputArray src, InputArray mask=noArray()); 

//! computes mean value and standard deviation of all or selected array elements
计算所选矩阵的矩阵和标准差 
CV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, 
                             InputArray mask=noArray()); 


//! finds global minimum and maximum array elements and returns their values and their locations 
寻找全局最小值和最大值,返回其值与位置 
CV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal, 
                           CV_OUT double* maxVal=0, CV_OUT Point* minLoc=0, 
                           CV_OUT Point* maxLoc=0, InputArray mask=noArray()); 
CV_EXPORTS void minMaxIdx(InputArray src, double* minVal, double* maxVal, 
                          int* minIdx=0, int* maxIdx=0, InputArray mask=noArray()); 

//! computes square root of each matrix element (dst = src**0.5) 
计算矩阵中每个元素的平方根 
CV_EXPORTS_W void sqrt(InputArray src, OutputArray dst); 


//! computes exponent of each matrix element (dst = e**src) 
CV_EXPORTS_W void exp(InputArray src, OutputArray dst); 
//! computes natural logarithm of absolute value of each matrix element: dst = log(abs(src)) 
计算自然对数 
CV_EXPORTS_W void log(InputArray src, OutputArray dst); 
//! computes cube root of the argument 
计算立方根 
CV_EXPORTS_W float cubeRoot(float val); 


//! adds scaled array to another one (dst = alpha*src1 + src2) 
CV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst); 

//! computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma) 
计算两矩阵的加权和权值默认为1 
CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, 
                              double beta, double gamma, OutputArray dst, int dtype=-1); 

//! scales array elements, computes absolute values and converts the results to 8-bit unsigned integers: 
扫描矩阵元素,计算绝对值并转为8位无符号整型 
dst(i)=saturate_cast<uchar>abs(src(i)*alpha+beta) 
CV_EXPORTS_W void convertScaleAbs(InputArray src, OutputArray dst, 
                                  double alpha=1, double beta=0); 
//! transforms array of numbers using a lookup table: dst(i)=lut(src(i)) 
CV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst, 
                      int interpolation=0); 


<------------------------------------------------------------模糊处理以及腐蚀和膨胀--------------------------------------------------------------
应用:
      imshow("原图",image); 
    GaussianBlur(image,image,Size(5,5),1.5); 
    imshow("高斯滤波",image); 

    Mat eroded;//形态学处理,腐蚀 
    erode(image,eroded,Mat()); 
    Mat dilated;//形态学处理,膨胀 
    dilate(image,dilated,Mat()); 

原函数参数:
GaussianBlur( InputArray src, 
                                               OutputArray dst, Size ksize, 
                                               double sigmaX, double sigmaY=0, 
                                               int borderType=BORDER_DEFAULT ); 
高斯滤波: 
src--输入矩阵 
dst--输出矩阵 
Size(w,h)--滤波核大小 
sigmaX--X轴向标准偏差,为0表示sigmaX由滤波核计算所得 
sigmaY--Y轴向标准偏差,为0表示sigmaY由滤波核计算所得 

erode( InputArray src, OutputArray dst, InputArray kernel, 
                         Point anchor=Point(-1,-1), int iterations=1, 
                         int borderType=BORDER_CONSTANT, 
                         const Scalar& borderValue=morphologyDefaultBorderValue() ); 
腐蚀: 
src--输入矩阵 
dst--输出矩阵 
kernel--输入核,默认3x3矩阵( If element=Mat() , a 3 x 3 rectangular structuring element is used.),如需特别指定,需使用Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1)), anchor=Point(-1,-1)表示定点设为核中心。 iterations--表示迭代次数,这里默认为1表示只迭代一次 
  • borderType – Pixel extrapolation method. See borderInterpolate() for details.
  • borderValue – Border value in case of a constant border. The default value has a special meaning. See createMorphologyFilter() for details.


dilate( InputArray src, OutputArray dst, InputArray kernel,
                          Point anchor=Point(-1,-1), int iterations=1,
                          int borderType=BORDER_CONSTANT,
                          const Scalar& borderValue=morphologyDefaultBorderValue() );

膨胀:

src--输入矩阵
dst--输出矩阵
kernel--输入核,默认3x3矩阵( If element=Mat() , a 3 x 3 rectangular structuring element is used.),如需特别指定,需使用Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1)),anchor=Point(-1,-1)表示定点设为核中心。 iterations--表示迭代次数,这里默认为1表示只迭代一次


--------------------------------------------------------------------------------------------------------------------------------------------------->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值