opencv中文手册名师优质资料Word文档下载推荐.docx
- 文档编号:21960896
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:75
- 大小:499.67KB
opencv中文手册名师优质资料Word文档下载推荐.docx
《opencv中文手册名师优质资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《opencv中文手册名师优质资料Word文档下载推荐.docx(75页珍藏版)》请在冰豆网上搜索。
o2.9WarpPerspective
o2.10WarpPerspectiveQMatrix
o2.11GetPerspectiveTransform
o2.12Remap
o2.13LogPolar
∙3形态学操作
o3.1CreateStructuringElementEx
o3.2ReleaseStructuringElement
o3.3Erode
o3.4Dilate
o3.5MorphologyEx
∙4滤波器与色彩空间变换
o4.1Smooth
o4.2Filter2D
o4.3CopyMakeBorder
o4.4Integral
o4.5CvtColor
o4.6Threshold
o4.7AdaptiveThreshold
∙5金字塔及其应用
o5.1PyrDown
o5.2PyrUp
∙6连接部件
o6.1CvConnectedComp
o6.2FloodFill
o6.3FindContours
o6.4StartFindContours
o6.5FindNextContour
o6.6SubstituteContour
o6.7EndFindContours
o6.8PyrSegmentation
o6.9PyrMeanShiftFiltering
o6.10Watershed
∙7图像与轮廓矩
o7.1Moments
o7.2GetSpatialMoment
o7.3GetCentralMoment
o7.4GetNormalizedCentralMoment
o7.5GetHuMoments
∙8特殊图像变换
o8.1HoughLines
o8.2HoughCircles
o8.3DistTransform
o8.4Inpaint
∙9直方图
o9.1CvHistogram
o9.2CreateHist
o9.3SetHistBinRanges
o9.4ReleaseHist
o9.5ClearHist
o9.6MakeHistHeaderForArray
o9.7QueryHistValue_1D
o9.8GetHistValue_1D
o9.9GetMinMaxHistValue
o9.10NormalizeHist
o9.11ThreshHist
o9.12CompareHist
o9.13CopyHist
o9.14CalcHist
o9.15CalcBackProject
o9.16CalcBackProjectPatch
o9.17CalcProbDensity
o9.18EqualizeHist
∙10匹配
o10.1MatchTemplate
o10.2MatchShapes
o10.3CalcEMD2
梯度、边缘和角点
Sobel
使用扩展Sobel算子计算一阶、二阶、三阶或混合图像差分
voidcvSobel(constCvArr*src,CvArr*dst,intxorder,intyorder,intaperture_size=3);
src
输入图像.
dst
输出图像.
xorder
x方向上的差分阶数
yorder
y方向上的差分阶数
aperture_size
扩展Sobel核的大小,必须是1,3,5或7。
除了尺寸为1,其它情况下,aperture_size×
aperture_size可分离内核将用来计算差分。
对aperture_size=1的情况,使用3x1或1x3内核(不进行高斯平滑操作)。
这里有一个特殊变量CV_SCHARR(=-1),对应3x3Scharr滤波器,可以给出比3x3Sobel滤波更精确的结果。
Scharr滤波器系数是:
对x-方向或矩阵转置后对y-方向。
函数cvSobel通过对图像用相应的内核进行卷积操作来计算图像差分:
由于Sobel算子结合了Gaussian平滑和微分,所以,其结果或多或少对噪声有一定的鲁棒性。
通常情况,函数调用采用如下参数(xorder=1,yorder=0,aperture_size=3)或(xorder=0,yorder=1,aperture_size=3)来计算一阶x-或y-方向的图像差分。
第一种情况对应:
核。
第二种对应:
或者
核的选则依赖于图像原点的定义(origin来自IplImage结构的定义)。
由于该函数不进行图像尺度变换,所以和输入图像(数组)相比,输出图像(数组)的元素通常具有更大的绝对数值(译者注:
即像素的位深)。
为防止溢出,当输入图像是8位的,要求输出图像是16位的。
当然可以用函数cvConvertScale或cvConvertScaleAbs转换为8位的。
除了8-位图像,函数也接受32-位浮点数图像。
所有输入和输出图像都必须是单通道的,并且具有相同的图像尺寸或者ROI尺寸。
Laplace
计算图像的Laplacian变换
voidcvLaplace(constCvArr*src,CvArr*dst,intaperture_size=3);
核大小(与cvSobel中定义一样).
函数cvLaplace计算输入图像的Laplacian变换,方法是先用sobel算子计算二阶x-和y-差分,再求和:
对aperture_size=1则给出最快计算结果,相当于对图像采用如下内核做卷积:
类似于cvSobel函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。
Canny
采用Canny算法做边缘检测
voidcvCanny(constCvArr*image,CvArr*edges,doublethreshold1,
doublethreshold2,intaperture_size=3);
image
单通道输入图像.
edges
单通道存储边缘的输出图像
threshold1
第一个阈值
threshold2
第二个阈值
Sobel算子内核大小(见cvSobel).
函数cvCanny采用CANNY算法发现输入图像的边缘而且在输出图像中标识这些边缘。
threshold1和threshold2当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。
∙注意事项:
cvCanny只接受单通道图像作为输入。
∙外部链接:
经典的canny自调整阈值算法的一个opencv的实现见在OpenCV中自适应确定canny算法的分割门限
PreCornerDetect
计算用于角点检测的特征图,
voidcvPreCornerDetect(constCvArr*image,CvArr*corners,intaperture_size=3);
corners
保存候选角点的特征图
Sobel算子的核大小(见cvSobel).
函数cvPreCornerDetect计算函数
其中D表示一阶图像差分,表示二阶图像差分。
角点被认为是函数的局部最大值:
//假设图像格式为浮点数
IplImage*corners=cvCloneImage(image);
IplImage*dilated_corners=cvCloneImage(image);
IplImage*corner_mask=cvCreateImage(cvGetSize(image),8,1);
cvPreCornerDetect(image,corners,3);
cvDilate(corners,dilated_corners,0,1);
cvSubS(corners,dilated_corners,corners);
cvCmpS(corners,0,corner_mask,CV_CMP_GE);
cvReleaseImage(&
corners);
dilated_corners);
CornerEigenValsAndVecs
计算图像块的特征值和特征向量,用于角点检测
voidcvCornerEigenValsAndVecs(constCvArr*image,CvArr*eigenvv,
intblock_size,intaperture_size=3);
eigenvv
保存结果的数组。
必须比输入图像宽6倍。
block_size
邻域大小(见讨论).
Sobel算子的核尺寸(见cvSobel).
对每个象素,函数cvCornerEigenValsAndVecs考虑block_size×
block_size大小的邻域S(p),然后在邻域上计算图像差分的相关矩阵:
然后它计算矩阵的特征值和特征向量,并且按如下方式(λ1,λ2,x1,y1,x2,y2)存储这些值到输出图像中,其中
λ1,λ2-M的特征值,没有排序
(x1,y1)-特征向量,对λ1
(x2,y2)-特征向量,对λ2
CornerMinEigenVal
计算梯度矩阵的最小特征值,用于角点检测
voidcvCornerMinEigenVal(constCvArr*image,
CvArr*eigenval,intblock_size,intaperture_size=3);
eigenval
保存最小特征值的图像.与输入图像大小一致
邻域大小(见讨论cvCornerEigenValsAndVecs).
Sobel算子的核尺寸(见cvSobel).当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数.
函数cvCornerMinEigenVal与cvCornerEigenValsAndVecs类似,但是它仅仅计算和存储每个象素点差分相关矩阵的最小特征值,即前一个函数的min(λ1,λ2)
CornerHarris
哈里斯(Harris)角点检测
voidcvCornerHarris(constCvArr*image,CvArr*harris_responce,
intblock_size,intaperture_size=3,doublek=0.04);
输入图像。
harris_responce
存储哈里斯(Harris)检测responces的图像。
与输入图像等大。
邻域大小(见关于cvCornerEigenValsAndVecs的讨论)。
扩展Sobel核的大小(见cvSobel)。
格式.当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数。
k
harris检测器的自由参数。
参见下面的公式。
函数cvCornerHarris对输入图像进行Harris边界检测。
类似于cvCornerMinEigenVal和cvCornerEigenValsAndVecs。
对每个像素,在block_size*block_size大小的邻域上,计算其2*2梯度共变矩阵(或相关异变矩阵)M。
然后,将
det(M)-k*trace(M)2(这里2是平方)
保存到输出图像中。
输入图像中的角点在输出图像中由局部最大值表示。
FindCornerSubPix
精确角点位置
voidcvFindCornerSubPix(constCvArr*image,CvPoint2D32f*corners,
intcount,CvSizewin,CvSizezero_zone,
CvTermCriteriacriteria);
输入角点的初始坐标,也存储精确的输出坐标
count
角点数目
win
搜索窗口的一半尺寸。
如果win=(5,5)那么使用5*2+1×
5*2+1=11×
11大小的搜索窗口
zero_zone
死区的一半尺寸,死区为不对搜索区的中央位置做求和运算的区域。
它是用来避免自相关矩阵出现的某些可能的奇异性。
当值为(-1,-1)表示没有死区。
criteria
求角点的迭代过程的终止条件。
即角点位置的确定,要么迭代数大于某个设定值,或者是精确度达到某个设定值。
criteria可以是最大迭代数目,或者是设定的精确度,也可以是它们的组合。
函数cvFindCornerSubPix通过迭代来发现具有子象素精度的角点位置,或如图所示的放射鞍点(radialsaddlepoints)。
子象素级角点定位的实现是基于对向量正交性的观测而实现的,即从中央点q到其邻域点p的向量和p点处的图像梯度正交(服从图像和测量噪声)。
考虑以下的表达式:
εi=DIpiT•(q-pi)
其中,DIpi表示在q的一个邻域点pi处的图像梯度,q的值通过最小化εi得到。
通过将εi设为0,可以建立系统方程如下:
sumi(DIpi•DIpiT)•q-sumi(DIpi•DIpiT•pi)=0
其中q的邻域(搜索窗)中的梯度被累加。
调用第一个梯度参数G和第二个梯度参数b,得到:
q=G-1•b
该算法将搜索窗的中心设为新的中心q,然后迭代,直到找到低于某个阈值点的中心位置。
GoodFeaturesToTrack
确定图像的强角点
voidcvGoodFeaturesToTrack(constCvArr*image,CvArr*eig_image,CvArr*temp_image,
CvPoint2D32f*corners,int*corner_count,
doublequality_level,doublemin_distance,
constCvArr*mask=NULL);
输入图像,8-位或浮点32-比特,单通道
eig_image
临时浮点32-位图像,尺寸与输入图像一致
temp_image
另外一个临时图像,格式与尺寸与eig_image一致
输出参数,检测到的角点
corner_count
输出参数,检测到的角点数目
quality_level
最大最小特征值的乘法因子。
定义可接受图像角点的最小质量因子。
min_distance
限制因子。
得到的角点的最小距离。
使用Euclidian距离
mask
ROI:
感兴趣区域。
函数在ROI中计算角点,如果mask为NULL,则选择整个图像。
必须为单通道的灰度图,大小与输入图像相同。
mask对应的点不为0,表示计算该点。
函数cvGoodFeaturesToTrack在图像中寻找具有大特征值的角点。
该函数,首先用cvCornerMinEigenVal计算输入图像的每一个象素点的最小特征值,并将结果存储到变量eig_image中。
然后进行非最大值抑制(仅保留3x3邻域中的局部最大值)。
下一步将最小特征值小于quality_level•max(eig_image(x,y))排除掉。
最后,函数确保所有发现的角点之间具有足够的距离,(最强的角点第一个保留,然后检查新的角点与已有角点之间的距离大于min_distance)。
采样、插值和几何变换
InitLineIterator
初始化线段迭代器
intcvInitLineIterator(constCvArr*image,CvPointpt1,CvPointpt2,
CvLineIterator*line_iterator,intconnectivity=8);
带采线段的输入图像.
pt1
线段起始点
pt2
线段结束点
line_iterator
指向线段迭代器状态结构的指针
connectivity
被扫描线段的连通数,4或8.
函数cvInitLineIterator初始化线段迭代器,并返回两点之间的象素点数目。
两个点必须在图像内。
当迭代器初始化后,连接两点的光栅线上所有点,都可以连续通过调用CV_NEXT_LINE_POINT来得到。
线段上的点是使用4-连通或8-连通利用Bresenham算法逐点计算的。
例子:
使用线段迭代器计算彩色线上象素值的和
CvScalarsum_line_pixels(IplImage*image,CvPointpt1,CvPointpt2)
{
CvLineIteratoriterator;
intblue_sum=0,green_sum=0,red_sum=0;
intcount=cvInitLineIterator(image,pt1,pt2,&
iterator,8);
for(inti=0;
i<
count;
i++){
blue_sum+=iterator.ptr[0];
green_sum+=iterator.ptr[1];
red_sum+=iterator.ptr[2];
CV_NEXT_LINE_POINT(iterator);
/*printthepixelcoordinates:
demonstrateshowtocalculatethecoordinates*/
{
intoffset,x,y;
/*assumethatROIisnotset,otherwiseneedtotakeitintoaccount.*/
offset=iterator.ptr-(uchar*)(image->
imageData);
y=offset/image->
widthStep;
x=(offset-y*image->
widthStep)/(3*sizeof(uchar)/*sizeofpixel*/);
printf("
(%d,%d)\n"
x,y);
}
returncvScalar(blue_sum,green_sum,red_sum);
}
SampleLine
将图像上某一光栅线上的像素数据读入缓冲区
intcvSampleLine(constCvArr*image,CvPointpt1,CvPointpt2,
void*buffer,intconnectivity=8);
输入图像
pt1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- opencv 中文 手册 名师 优质 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)