Mat类的拷贝从Mat类的数据储存结构来看,Mat类像储存是通过矩阵指针实现的。这样的话,在做片复制的时候,就必须要考虑的一个问题是:我们需要复制的是矩阵指针的地址,还是需要重新创建一个内存空间,把片存储矩阵重新拷贝一份。所以Mat类的拷贝具有浅拷贝和完全拷贝两种。
1使用拷贝构造函数进行拷贝Mat类中具有自己的拷贝构造函数,其函数原型如下浅拷贝:Mat;使用拷贝构造函数进行片的拷贝有两种写法,并且这两种写法是等价的。Matm=imread;Matm2;
2使用clone函数或者copyTo函数进行拷贝使用这两种方法拷贝,是一种完全拷贝,会为片生成独立的片储存矩阵,与原片不公用数据,这样的话,操作其中一个,其他的并不会受到影响,缺点是占用空间大,而且速度比较Matm=imread;Matm1;m.copyTo;Matm2=m.clone;
imread-------------------------------------------------------------------原型Matimread第一个参数filename:表示像的路径。第二个参数flags:表示读取像的方式。
IMREAD_UNCHANGED=-表示读取原,不进行任何改变IMREAD_GRAYSCALE=0,表示以灰度方式读取原IMREAD_COLOR=表示以RGB方式读取原
-------------------------------------------------------------------intresultCols=img_bgr.cols-img_sub.cols+1;intresultRows=img_bgr.rows-img_sub.rows+1;Matresult.create;Matresult.create使用creat函数,无法初始化,如果新的需求大于原来的内存,它才会重新分配内存区域resultRows:标识矩阵宽度resultCols:标识矩阵高度type:标志矩阵类型CV_
处理方式:将模板与重叠的像区域进行比较。该函数在像中滑动,使用指定的方法将大小为w×h的重叠块与templ进行比较,并将比较结果存储在result中。以下是可用比较方法的公式。求和是在模板和/或像块上完成的:x′=0…w−1,y′=0…h−1函数完成比较后,可以使用minMaxLoc函数以全局最小值或最大值找到最佳匹配。在彩色像的情况下,分子中的模板总和和分母中的每个总和在所有通道上完成,并且每个通道使用单独的平均值。即该函数可以获取一个颜色模板和一个彩色像。结果仍然是单通道像,更易于分析。
-------------------------------------------------------------------voidcvtColor;函数参数解释src:输入的源像。为矩阵形式。dst:输出的目标像,即经过色彩转后我们需要得到的像。也为矩阵形式。code:颜色空间转换的标识符,表示我们所要进行空间转换的结果。BGR——灰度COLOR_BGR2GRAYRGB——灰度COLOR_RGB2GRAY
归一化作用:归一化就是要把需要处理的数据经过处理后限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同统一和合一的意思。此外,归一化还有其他作用:无量纲化:例如房子数量和收入,从业务层知道这两者的重要性一样,所以把它们全部归一化,这是从业务层面上作的处理。避免数值问题:不同的数据在不同列数据的数量级相差过大的话,计算起来大数的变化会掩盖掉小数的变化。一些模型求解的需要:例如梯度下降法,如果不归一化,当学习率较大时,求解过程会呈之字形下降。时间序列:进行log分析时,会将原本绝对化的时间序列归一化到某个基准时刻,形成相对时间序列,方便排查。收敛速度:加快求解过程中参数的收敛速度。
-------------------------------------------------------------------OpenCV中的函数minMaxLoc用于找出矩阵中的最大值和最小值,并且给出它们中的坐标。voidcv::minMaxLoc)result—输入矩阵,要求是单通道的像,即二维的矩阵。minVal—矩阵中的最小值。maxVal—矩阵中的最大值。minLoc—矩阵中的最小值的坐标。maxLoc—矩阵中的最大值的坐标。mask—掩模矩阵。
if{matchLoc=minLoc;}else{matchLoc=maxLoc;}
-------------------------------------------------------------------Alph通道:Alpha通道的概念与功能在计算机形学中,一个RGB颜色模型的真彩形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现形的透明效果,采取在形文件的处理与存储中附加上另一个8位信息的方法,这个附加的代表形中各个素点透明度的通道信息就被叫做Alpha通道。
Alpha通道使用8位二进制数,就可以表示256级灰度,即256级的透明度。白色的Alpha像素用以定义不透明的彩色像素,而黑色的Alpha通道像素用以定义透明像素,介于黑白之间的灰度的Alpha像素用以定义不同程度的半透明像素。因而通过一个32位总线的形卡来显示带Alpha通道的形,就可能呈现出透明或半透明的视觉效果。
透明或半透明形的数学模型一个透明或半透明形的数学模型应当如下:为了便于下面的分析,设Alpha值[0,255]区间映射为[0,1]区间相对应的值表示,即Alpha值为0—1之间的数值。则形文件中各个像素点可表示为:Graphx屏幕上相应像素点的显示值就转换为:DispxAlpha通道不仅用于单个形的透明或半透明显示,更重要的是在像合成中被广泛运用。下面是如何根据Alpha通道数据进行像混合的算法:事实上,我们把需要组合的颜色计算出不含Alpha分量的原始RGB分量然后相加便可。如:两幅像分别为A和B,由这两幅像组合而成的像称为C,则可用如下四元组表示A和B,三元组表示像C:A:B:C:根据上述算法,则:Rc=RaAlphaa+RbAlphabGc=GaAlphaa+GbAlphabBc=BaAlphaa+Bb*Alphab这就是两像混合后的三原色分量。如果有多幅像需要混合,则按照以上方法两幅两幅地进行混合。
在像处理中,Alpha用来衡量一个像素或像的透明度。在非压缩的32位RGB像中,每个像素是由四个部分组成:一个Alpha通道和三个颜色分量。当Alpha值为0时,该像素是完全透明的,而当Alpha值为255时,则该像素是完全不透明。
inRange:-------------------------------------------------------------------cvtColor;#将像转为HSV格式进而得到mask,HSV分别代表色相、饱和度、明度inRange,Scalar,img_flag);cvinRange用以确认元素值是否介于某个区域inRange函数需要设定三个参数,其中src指源像;lowerb指像中低于lowerb的值,其所对应的像值将为0;upperb指像中高于upperb的值,像值变为0。换言之,源像中仅有像值介于lowerb和upperb之间的值才不为0,且值将变成255
cvbitwise_and用于对两个数组对位元素进行运算,即计算机中的“和”运算。以二进制为例,1&0输出1&0、0&0&0则均输出0。bitwise_and函数需要设定三个参数,其中src1指第一个数组,src2指第二个数组,mask=用于指定具体的掩模,应设为uint8格式,即单通道的8-bit的数组。mask参数为可选参数,可省略。
形态学操作就是基于形状的一系列像处理操作。OpenCV为进行像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有二种,他们是:膨胀与腐蚀。膨胀与腐蚀能实现多种多样的功能,主要如下:
消除噪声分割出独立的像元素,在像中连接相邻的元素。寻找像中的明显的极大值区域或极小值区域求出像的梯度腐蚀和膨胀是针对白色部分而言的。膨胀就是对像高亮部分进行“领域扩张”,效果拥有比原更大的高亮区域;腐蚀是原中的高亮区域被蚕食,效果拥有比原更小的高亮区域。膨胀用来处理缺陷问题;腐蚀用来处理毛刺问题。
函数原型CV_EXPORTS_Wvoiderode,intiterations=1,intborderType=BORDER_CONSTANT,constScalar&borderValue=morphologyDefaultBorderValue);
voiddilate,intiterations=1,intborderType=BORDER_CONSTANT,constScalar&borderValue=morphologyDefaultBorderValue);
参数详解:第一个参数:image,单通道像矩阵,可以是灰度,但更常用的是二值像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值像第二个参数:contours,定义为“vector
参数详解:InputArraycurve:一般是由像的轮廓点组成的点集OutputArrayapproxCurve:表示输出的多边形点集doubleepsilon:主要表示输出的精度,就是另个轮廓点之间最大距离数,5,6,,,,,,boolclosed:表示输出的多边形是否封闭
RectboundingRect-------------------------------------------------------------------输入:InputArray类型的array,输入灰度像或二维点集。输出:Rect类型的矩形信息,包括矩形尺寸和位置。
寻找包裹轮廓的最小正矩形:boundingRect函数返回矩阵应满足:轮廓上的点均在矩阵空间内。矩阵是正矩阵。
image,目标像,填Mat类对象即可。contours,输入的轮廓,每个轮廓都是一组点集,可用Point类型的vector表示。contourIdx,轮廓的索引编号。若为负值,则绘制所有轮廓。color,轮廓颜色。thickness,轮廓线条的粗细程度,有默认值若其为负值,便会填充轮廓内部空间。lineType,线条的类型,有默认值可去类型如下:hierarchy,可选的层次结构信息,有默认值noArray。maxLevel,用于绘制轮廓的最大等级,有默认值INT_MAX。offset,轮廓信息相对于目标像对应点的偏移量,相当于在每一个轮廓点上加上该偏移量,有默认值Point。在ROI区域绘制轮廓时,这个参数便可派上用场。
功能描述绘制一个简单的、粗的或填充边界的矩形。函数cv::rectangle绘制一个矩形轮廓或一个填充矩形,其两个相对的角是pt1和pt
voidcv::namedWindowwinname:窗口名称,用作窗口的标识符flags:窗口属性设置标志
像显示函数imshow:我们在前面已经见过了像显示函数imshow的调用方式,这里我们给出函数的原型。
voidcv::imshowwinname:要显示像的窗口的名字,用字符串形式赋值mat:要显示的像矩阵
注意此函数运行后会继续执行后面程序,如果后面程序执行完直接退出的话,那么显示的像有可能闪一下就消失了,因此在需要显示像的程序中,往往会在imshow函数后跟有cv::waitKey函数,用于将程序暂停一段时间。waitKey函数是以毫秒计的等待时长,如果参数缺省或者为“0”表示等待用户按键结束该函数。
文章为作者独立观点,不代表股票配资公司观点