opencv中文手册范本.docx
- 文档编号:11410653
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:90
- 大小:495.76KB
opencv中文手册范本.docx
《opencv中文手册范本.docx》由会员分享,可在线阅读,更多相关《opencv中文手册范本.docx(90页珍藏版)》请在冰豆网上搜索。
opencv中文手册范本
∙1梯度、边缘和角点
o1.1Sobel
o1.2Laplace
o1.3Canny
o1.4PreCornerDetect
o1.5CornerEigenValsAndVecs
o1.6CornerMinEigenVal
o1.7CornerHarris
o1.8FindCornerSubPix
o1.9GoodFeaturesToTrack
∙2采样、插值和几何变换
o2.1InitLineIterator
o2.2SampleLine
o2.3GetRectSubPix
o2.4GetQuadrangleSubPix
o2.5Resize
o2.6WarpAffine
o2.7GetAffineTransform
o2.82DRotationMatrix
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);
src
输入图像.
dst
输出图像.
aperture_size
核大小(与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
第二个阈值
aperture_size
Sobel算子内核大小(见cvSobel).
函数cvCanny采用CANNY算法发现输入图像的边缘而且在输出图像中标识这些边缘。
threshold1和threshold2当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。
∙注意事项:
cvCanny只接受单通道图像作为输入。
∙外部链接:
经典的canny自调整阈值算法的一个opencv的实现见在OpenCV中自适应确定canny算法的分割门限
PreCornerDetect
计算用于角点检测的特征图,
voidcvPreCornerDetect(constCvArr*image,CvArr*corners,intaperture_size=3);
image
输入图像.
corners
保存候选角点的特征图
aperture_size
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);
cvReleaseImage(&dilated_corners);
CornerEigenValsAndVecs
计算图像块的特征值和特征向量,用于角点检测
voidcvCornerEigenValsAndVecs(constCvArr*image,CvArr*eigenvv,
intblock_size,intaperture_size=3);
image
输入图像.
eigenvv
保存结果的数组。
必须比输入图像宽6倍。
block_size
邻域大小(见讨论).
aperture_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);
image
输入图像.
eigenval
保存最小特征值的图像.与输入图像大小一致
block_size
邻域大小(见讨论cvCornerEigenValsAndVecs).
aperture_size
Sobel算子的核尺寸(见cvSobel).当输入图像是浮点数格式时,该参数表示用来计算差分固定的浮点滤波器的个数.
函数cvCornerMinEigenVal与cvCornerEigenValsAndVecs类似,但是它仅仅计算和存储每个象素点差分相关矩阵的最小特征值,即前一个函数的min(λ1,λ2)
CornerHarris
哈里斯(Harris)角点检测
voidcvCornerHarris(constCvArr*image,CvArr*harris_responce,
intblock_size,intaperture_size=3,doublek=0.04);
image
输入图像。
harris_responce
存储哈里斯(Harris)检测responces的图像。
与输入图像等大。
block_size
邻域大小(见关于cvCornerEigenValsAndVecs的讨论)。
aperture_size
扩展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);
image
输入图像.
corners
输入角点的初始坐标,也存储精确的输出坐标
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);
image
输入图像,8-位或浮点32-比特,单通道
eig_image
临时浮点32-位图像,尺寸与输入图像一致
temp_image
另外一个临时图像,格式与尺寸与eig_image一致
corners
输出参数,检测到的角点
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);
image
带采线段的输入图像.
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 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); image 输入图像 pt1 光栅线段的起点 pt2 光栅线段的终点 buffer 存储线段点的缓存区,必须有足够大小来存储点max(|pt2.x-pt1.x|+1,|pt2.y-pt1.y|+1): 8-连通情况下,或者|pt2.x-pt1.x|+|pt2.y-pt1.y|+1: 4-连通情况下. connectivity 线段的连通方式,4or8. 函数cvSampleLine实现了线段迭代器的一个特殊应用。 它读取由pt1和pt2两点确定的线段上的所有图像点,包括终点,并存储到缓存中。 GetRectSubPix 从图像中提取象素矩形,使用子象素精度 voidcvGetRectSubPix(constCvArr*src,CvArr*dst,CvPoint2D32fcenter); src 输入图像. dst 提取的矩形. center 提取的象素矩形的中心,浮点数坐标。 中心必须位于图像内部. 函数cvGetRectSubPix从图像src中提取矩形: dst(x,y)=src(x+center.x-(width(dst)-1)*0.5,y+center.y-(height(dst)-1)*0.5) 其中非整数象素点坐标采用双线性插值提取。 对多通道图像,每个通道独立单独完成提取。 尽管函数要求矩形的中心一定要在输入图像之中,但是有可能出现矩形的一部分超出图像边界的情况,这时,该函数复制边界的模识(hunnish: 即用于矩形相交的图像边界线段的象素来代替矩形超越部分的象素)。 GetQuadrangleSubPix 提取象素四边形,使用子象素精度 voidcvGetQuadrangleSubPix(constCvArr*src,CvArr*dst,constCvMat*map_matrix); src 输入图像. dst 提取的四边形. map_matrix 3×2变换矩阵[A|b](见讨论). 函数cvGetQuadrangleSubPix以子象素精度从图像src中提取四边形,使用子象素精度,并且将结果存储于dst,计算公式是: dst(x+width(dst)/2,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- opencv 中文 手册 范本