opencv中文手册.docx

上传人:b****7 文档编号:8964304 上传时间:2023-02-02 格式:DOCX 页数:89 大小:490.91KB
下载 相关 举报
opencv中文手册.docx_第1页
第1页 / 共89页
opencv中文手册.docx_第2页
第2页 / 共89页
opencv中文手册.docx_第3页
第3页 / 共89页
opencv中文手册.docx_第4页
第4页 / 共89页
opencv中文手册.docx_第5页
第5页 / 共89页
点击查看更多>>
下载资源
资源描述

opencv中文手册.docx

《opencv中文手册.docx》由会员分享,可在线阅读,更多相关《opencv中文手册.docx(89页珍藏版)》请在冰豆网上搜索。

opencv中文手册.docx

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,y+height(dst)/2)=src(A11x+A12y+b1,A21x+A22y+b2)

其中A和b均来自映射矩阵(译者注:

A,b为几何形变

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1