版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
书目
.1梯度、边缘和角点
o1.1Sobel
o1.2Laplace
o1.3Canny
o1.4PreCornerDetect
o1.5CornerEigenValsAndVecs
o1.6CornerMinEigenVal
o1.7CornerHarris
o1.8FindCornerSubPix
o1.9GoodFeaturesToTrack
•2采样、插值和几何变换
o2.1InitLinelterator
o2.2SampleLine
o2.3GetRectSubPix
o2.4GetQuadrangleSubPix
o2,5Resize
o2.6WarpAffine
o2.7GetAffineTransform
o2.82DRotationMatrix
o2.9WarpPerspective
o2.10WarpPerspectiveQMatcix
o2.11GetPerspectiveTransform
o2.12Remap
o2.13LogPolar
.3形态学操作
o3.1CreateStructuringElementEx
o3,2ReleaseStructuringElement
o3,3Erode
o3.4Dilate
o3.5MorphologyEx
.4滤波器与色调空间变换
o4,1Smooth
o4.2Filter2D
o4.3CopyMakeBocder
o4.4Integral
o4,5CvtColor
o4.6Threshold
o4.1AdaptiveThreshold
.5金字塔及其应用
o5.1PyrDown
o5.2PyrUp
•6连接部件
o6.1CvConnectedComp
o6.2FloodFill
o6.3FindContours
o6.4StartFindContours
o6.5FindNextContour
o6.6SubstituteContour
o6.1EndFindContours
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.7QueryHistValueID
o9.8GetHistValueID
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,int
aperture_size=3);
src
输入图像.
dst
输出图像.
xorder
X方向上的差分阶数
yorder
y方向上的差分阶数
aperture_size
扩展Sobel核的大小,必需是1,3,5或7o除了尺寸为1,其它状
况下,aperture_sizeXaperture_size可分别内核将用来计算差分。
对aperture_size=l的状况,运用3x1或1x3内核(不进行高斯平
滑操作)。这里有一个特别变量CV_SCHARR(=-1),对应3x3Scharr滤
波器,可以给出比3x3Sobel滤波应精确的结果。Scharr滤波器系数是:
--303'
-10010
-303
对x-方向或矩阵转置后对y-方向。
函数cvSobel通过对图像用相应的内核进行卷积操作来计算图像差分:
^xorder-k-yorderc
dst®y)
^j^xorderyorder
由于Sobel算子结合了Gaussian平滑和微分,所以,其结果或多或少对噪声
有肯定的鲁棒性。通常状况,函数调用采纳如下参数(xorder=l,yorder=0,
aperture_size=3)或(xorder=0,yorder=l,aperture_size=3)来计算一阶
x-或y-方向的图像差分。第一种状况对应:
-101
-202
-101」核。
其次种对应:
'—1—2—1-
000
121
或者
I21'
000
-1-2-1
核的选则依靠于图像原点的定义(origin来自Ipllmage结构的定义)。由于该
函数不进行图像尺度变换,所以和输入图像(数组)相比,输出图像(数组)的元素
通常具有更大的肯定数值(译者注:即像素的位深)。为防止溢出,当输入图像
是8位的,要求输出图像是16位的。当然可以用函数cvConvertScale或
cvConvertScaleAbs转换为8位的。除了8-位图像,函数也接受32-位浮点
数图像。全部输入和输出图像都必需是单通道的,并且具有相同的图像尺寸或者
R0I尺寸。
Laplace
计算图像的Laplacian变换
voidcvLaplace(constCvArr*src,CvArr*dst,intaperture_size=3);
src
输入图像.
dst
输出图像.
aperture_size
核大小(与cvSobel中定义一样).
函数cvLaplace计算输入图像的Laplacian变换,方法是先用sobel算子计
算二阶x-和y-差分,再求和:
cPsrc(Psrc
质£出切=与+疗
对aperture_size=l则给出最快计算结果,相当于对图像采纳如下内核做卷积:
010
1-41
010
类似于cvSobel函数,该函数也不作图像的尺度变换,所支持的输入、输出图
像类型的组合和cvSobel一样。
Canny
采纳Canny算法做边缘检测
voidcvCanny(constCvArr*image,CvArr*edges,doub1ethresholdl,
doublethreshold2,intaperture_size=3);
image
单通道输入图像.
edges
单通道存储边缘的输出图像
thresholdl
第一个阈值
threshold2
其次个阈值
aperture_size
Sobel算子内核大小(见cvSobel).
函数cvCanny采纳CANNY算法发觉输入图像的边缘而且在输出图像中标识这
些边缘。thresholdl和threshold2当中的小阈值用来限制边缘连接,大的阈值
用来限制强边缘的初始分割。
•留意事项:cvCanny只接受单通道图像作为输入。
•外部链接:经典的canny自调整阈值算法的一个opencv的实现见在
OpenCV中自适应确定canny算法的分割门限
PreCornerDetect
计算用于角点检测的特征图,
voidcvPreCornerDetect(constCvArr*image,CvArr*corners,int
aperture_size=3);
image
输入图像.
corners
保存候选角点的特征图
aperture_size
Sobel算子的核大小(见cvSobel).
函数cvPreCornerDetect计算函数
+DjDXX—2DXDyDXy
其中D表示一阶图像差分,回表示二阶图像差分。角点被认为是函数的局部
最大值:
//假设图像格式为浮点数
IplImage*corners=cvClonelmage(image);
IplImage*dilatedcorners=cvClonelmage(image);
IplImage*corner_mask=cvCreatelmage(cvGetSize(image),8,1);
cvPreCornerDetect(image,corners,3);
cvDilate(corners,dilated_corners,0,1);
cvSubS(corners,dilated_corners,corners);
cvCmpS(corners,0,corner_mask,CVCMPGE);
cvReleaselmage(fecorners);
cvReleaselmage(&dilated_corners);
CornerEigenValsAndVecs
计算图像块的特征值和特征向量,用于角点检测
voidcvCornerEigenValsAndVecs(constCvArr*image,CvArr*eigenvv,
intblock_size,intaperture_size=3);
image
输入图像.
eigenvv
保存结果的数组。必需比输入图像宽6倍。
block_size
一邻域大小(见探讨).
aperture_size
Sobel算子的核尺寸(见cvSobel).
对每个象素,函数cvCornerEigenValsAndVecs考虑blocksizeXblocksize
大小的邻域S(p),然后在邻域上计算图像差分的相关矩阵]
借
〃
产E
药21
S小•
加
世
”?
-£ps)产
而
电
P)
然后它计算矩阵的特征值和特征向量,并且按如下方式(入1,入2,xl,yl,x2,
y2)存储这些值到输出图像中,其中
入1,X2-M的特征值,没有排序
(xl,yl)-特征向量,对XI
(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(XI,
入2)
CornerHarris
哈里斯(Harris)角点检测
voidcvCornerHarris(constCvArr*image,CvArr*harris_responce,
intblock_size,intaperture_size=3,doublek=0.04);
image
输入图像。
harris_responce
存储哈里斯(Harris)检测responces的图像。与输入图像等大。
blocksize
邻域大小(见关于cvCornerEigenValsAndVecs的探讨)。
aperture_size
扩展Sobel核的大小(见cvSobel)o格式.当输入图像是浮点数格式
时,该参数表示用来计算差分固定的浮点滤波器的个数。
k
harris检测器的自由参数。参见下面的公式。
函数cvCornerHarris对输入图像进行Harris边界检测。类似于
cvCornerMinEigenVal和cvCornerEigenValsAndVecso对每个像素,在
block_size^block_size大小的邻域上,计算其2*2梯度共变矩阵(或相
关异区矩阵)Mo然后,将
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+1X5*2+1=11X
11大小的搜寻窗口
zero_zone
死区的一半尺寸,死区为不对搜寻区的中心位置做求和运算的区域。它是
用来避开自相关矩阵出现的某些可能的奇异性。当值为(T,T)表示没
有死区。
criteria
求角点的迭代过程的终止条件。即角点位置的确定,要么迭代数大于某个
设定值,或者是精确度达到某个设定值。criteria可以是最大迭代数目,
或者是设定的精确度,也可以是它们的组合。
函数cvFindCornerSubPix通过迭代来发觉具有子象素精度的角点位置,或如图
所示的放射鞍点(radialsaddlepoints)。
(red)gradientdirection
罗索工作室
KOS00.BET
子象素级角点定位的实现是基于对向量正交性的观测而实现的,即从中心点q
到其邻域点P的向量和P点处的图像梯度正交(听从图像和测量噪声)。考虑
以下的表达式:
ei=DIpiT«(q-pi)
其中,DIpi表示在q的一个邻域点pi处的图像梯度,q的值通过最小化ei得
到。通过将£i设为0,可以建立系统方程如下:
sumi(DIpi,DIpiT),q-sumi(DIpi,DIpiT,pi)=0
其中q的邻域(搜寻窗)中的梯度被累加。调用第一个梯度参数G和其次个梯度
参数b,得到:
q=G-l,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
R0I:感爱好区域。函数在R0I中计算角点,假如mask为NULL,则选择
整个图像。必需为单通道的灰度图,大小与输入图像相同。mask对应的
点不为0,表示计算该点。
函数cvGoodFeaturesToTrack在图像中找寻具有大特征值的角点。该函数,首
先用cvCornerMinEigenVal计算输入图像的每一个象素点的最小特征值,并将
结果存储到变量eig_image中。然后进行非最大值抑制(仅保留3x3邻域中的
局部最大值)。下一步将最小特征值小于quality_level,max(eig_image(x,y))
解除掉。最终,函数确保全部发觉的角点之间具有足够的距离,(最强的角点第
一个保留,然后检查新的角点与已有角点之间的距离大于min_distance)。
采样、插值和几何变换
InitLinelterator
初始化线段迭代器
intcvInitLinelterator(constCvArr*image,CvPointptl,CvPointpt2,
CvLinelterator*line_iterator,int
connectivity=8);
image
带采线段的输入图像.
ptl
线段起始点
pt2
线段结束点
line_iterator
一指向线段迭代器状态结构的指针
connectivity
被扫描线段的连通数,4或8.
函数cvInitLinelterator初始化线段迭代器,并返回两点之间的象素点数目。
两个点必需在图像内。当迭代器初始化后,连接两点的光栅线上全部点,都可以
连续通过调用CV_NEXT_LINE_POINT来得到。线段上的点是运用4一连通或8—
连通利用Bresenham算法逐点计算的。
例子:运用线段迭代器计算彩色线上象素值的和
CvScalarsum_line_pixels(IplImagedimage,CvPointptl,CvPointpt2)
{
CvLinelteratoriterator;
intblue_sum=0,green_sum=0,red_sum=0;
intcount=cvInitLinelterator(image,ptl,pt2,feiterator,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:demonstrateshowtocalculatethe
coordinates*/
{
intoffset,x,y;
/*assumethatR0Iisnotset,otherwiseneedtotakeitinto
account.*/
offset=iterator,ptr-(uchar*)(image->imageData);
y=offset/image->widthStep;
x=(offset-y*image->widthStep)/(3^sizeof(uchar)/*sizeof
pixel*/);
printf(z/(%d,%d)\n〃,x,y);
)
}
returncvScalar(blue_sum,green_sum,red_sum);
}
Samp1eLine
将图像上某一光栅线上的像素数据读入缓冲区
intcvSampleLine(constCvArr*image,CvPointptl,CvPointpt2,
void*buffer,intconnectivity=8);
image
输入图像
ptl
光栅线段的起点
pt2
光栅线段的终点
buffer
存储线段点的缓存区,必需有足够大小来存储点max(|pt2.x-ptl.x|+l,
pt2.y-ptl.y|+l):8—连通状况下,或者
|pt2,x-ptl.x|+lpt2.y-ptl.y|+l:4一连通状况下.
connectivity
线段的连通方式,4or8.
函数cvSampleLine实现了线段迭代器的一个特别应用。它读取由ptl和pt2
两点确定的线段上的全部图像点,包括终点,并存储到缓存中。
GetRectSubPix
从图像中提取象素矩形,运用子象素精度
voidcvGetRectSubPix(constCvArr*src,CvArr*dst,CvPoint2D32f
center);
src
输入图像.
dst
提取的矩形.
center
提取的象素矩形的中心,浮点数坐标。中心必需位于图像内部.
函数cvGetRectSubPix从图像src中提取矩形:
dst(x,y)=src(x+center,x-(width(dst)T)*0.5,y+center,y一
(height(dst)-1)*0.5)
其中非整数象素点坐标采纳双线性插值提取。对多通道图像,每个通道独立单独
完成提取。尽管函数要求矩形的中心肯定要在输入图像之中,但是有可能出现矩
形的一部分超出图像边界的状况,这时,该函数复制边界的模识(hunnish:即用
于矩形相交的图像边界线段的象素来代替矩形超越部分的象素)。
GetQuadrangleSubPix
提取象素四边形,运用子象素精度
voidcvGetQuadrangleSubPix(constCvArr*src,CvArr*dst,constCvMat*
map_matrix);
src
输入图像.
dst
提取的四边形.
map_matrix
3X2变换矩阵[A[b](见探讨).
函数cvGetQuadrangleSubPix以子象素精度从图像src中提取四边形,运用子
象素精度,并且将结果存储于dst,计算公式是:
dst{x+width{dst)/2,y+height{dst)/2)=src{Anx+Ai2y+421x+
A22y+th)
其中A和b均来自映射矩阵(译者注:A,b为几何形变参数),映射矩阵为:
..141412人
map.niatrix=..,
其中在非整数坐标A1(Gy),+b的象素点值通过双线性变换得到。当函
数须要图像边界外的像素点时,运用重复边界模式(replicationbordermode)
复原出所需的值。多通道图像的每一个通道都单独计算。
例子:运用cvGetQuadrangleSubPix进行图像旋转
ttinclude〃cv.h〃
ttinclude"highgui.h〃
ttinclude"math.h〃
intmain(intargc,char**argv)
{
IplImage*src;
/*thefirstcommandlineparametermustbeimagefilename*/
if(argc==2&&(src=cvLoadlmage(argv[1],-1))!=0)
IplImage*dst=cvClonelmage(src);
intdelta=1;
intangle=0;
cvNamedWindow(〃src〃,1);
cvShowImage(〃src〃,src);
for(;;)
floatm[6];
doublefactor=(cos(angle*CV_PI/180.)+L1)*3;
CvMatM=cvMat(2,3,CV32F,m);
intw=src->width;
inth=src->height;
m[0]=(float)(factor*cos(-angle*2*CV_PI/180.));
m[l]=(float)(factor*sin(-angle*2^CV_PI/180.));
m[2]=w*0.5f;
m[3]=-m[l];
m[4]=m[0];
m[5]=h*0.5f;
cvGetQuadrangleSubPix(src,dst,&M,1,cvScalarAll(0));
cvNamedWindow(〃dst〃,1);
cvShowImage(〃dst〃,dst);
if(cvWaitKey(5)==27)
break;
angle=(angle+delta)%360;
}
)
return0;
)
Resize
图像大小变换
voidcvResize(constCvArr*src,CvArr*dst,int
interpo1ation=CV_INTER_LINEAR);
src
输入图像.
dst
输出图像.
interpolation
插值方法:
・CV」NTER_NN-最近邻插值,
・CV_INTER_LINEAR-双线性插值(缺省运用)
.CV_INTER_AREA-运用象素关系重采样。当图像缩小时候,该方法
可以避开水纹出现。当图像放大时,类似于CVINTERNN方法..
・CV」NTER_CUBIC-立方插值.
函数cvResize将图像src变更尺寸得到与dst同样大小。若设定ROI,函数
将按常规支持ROI.
WarpAffine
对图像做仿射变换
voidcvWarpAffine(constCvArr*src,CvArr*dst,constCvMat*map_matrix,
intflags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalarfillval=cvScalarAll(0));
src
输入图像.
dst
输出图像.
map_matrix
2X3变换矩阵
flags
插值方法和以下开关选项的组合:
.CV_WARP_FILL_OUTLIERS-填充全部输出图像的象素。假如部分象
素落在输入图像的边界外,那么它们的值设定为fillval.
・CV_WARP_INVERSE_MAP-指定map_matrix是输出图像到输入图像
的反变换,因此可以干脆用来做象素插值。否则,函数从
map_matrix得到反变换。
fillval
用来填充边界外面的值
函数cvWarpAffine利用下面指定的矩阵变换输入图像:
dst[x\y)<—src(x,y)
・假如没有指定CV_WARP」NVERSE_MAP,
3,y')T=map.matrix•(z,y,1)T
•否则,
(ar,=map-niatrix-(a/,y',1)T
函数与cvGetQuadrangleSubPix类似,但是不完全相同。cvWarpAffine要求
输入和输出图像具有同样的数据类型,有更大的资源开销(因此对小图像不太合
适)而且输出图像的部分可以保留不变。而cvGetQuadrangleSubPix可以精确
地从8位图像中提取四边形到浮点数缓存区中,具有比较小的系统开销,而且总
是全部变更输出图像的内容。
要变换稀疏矩阵,运用cxcore中的函数cvTransform。
GetAffineTransform
由三对点计算仿射变换
CvMat*cvGetAffineTransform(constCvPoint2D32f*src,
constCvPoint2D32f*dst,CvMat*map_matrix);
src
输入图像的三角形顶点坐标。
dst
输出图像的相应的三角形顶点坐标。
map_matrix
指向2X3输出矩阵的指针。
函数cvGetAffineTransform计算满意以下关系的仿射变换矩阵:
(&,&,=mapjinatrix•(g,妨,1)「
这里,dst(Z)=(Vi,yy),src(i)=(x“,i=0..2.
2DRotationMatrix
计算二维旋转的仿射变换矩阵
CvMat*cv2DRotationMatrix(CvPoint2D32fcenter,doubleangle,
doublescale,CvMat*map_matrix);
center
输入图像的旋转中心坐标
angle
旋转角度(度)。正值表示逆时针旋转(坐标原点假设在左上角).
scale
各项同性的尺度因子
map_matrix
输出2X3矩阵的指针
函数cv2DRotationMatrix计算矩阵:
[aB](1-a)^center,x-0*center,y]
[-8a|P*center,x+(1-a)^center,y]
wherea=scale*cos(angle),B=scale*sin(angle)
该变换并不变更原始旋转中心点的坐标,假如这不是操作目的,则可以通过调整
平移量变更其坐标(译者注:通过简洁的推导可知,仿射变换的实现是首先将旋
转中心置为坐标原点,再进行旋转和尺度变换,最终重新将坐标原点设定为输入
图像的左上角,这里的平移量是center,x,center,y).
WarpPerspective
对图像进行透视变换
voidcvWarpPerspective(constCvArr*src,CvArr*dst,constCvMat*
map_matrix,
int
flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalarfillval=cvScalarAll(0));
src
输入图像.
dst
输出图像.
map_matrix
3X3变换矩阵
flags
插值方法和以下开关选项的组合:
・CV_WARP_FILL_OUTLIERS-填充全部缩小图像的象素。假如部分象
素落在输入图像的边界外,那么它们的值设定为fillval.
・CV_WARP_INVERSE_MAP-指定matrix是输出图像到输入图像的反
爰换,因此可以干脆用来做象素插值。否则,函数从map,matrix
得到反变换。
fillval
用来填充边界外面的值
函数cvWarpPerspective利用下面指定矩阵变换输入图像:
dst(x,娟)<—S7'C(T,y)
・假如没有指定CV_WARP」NVERSE_MAP,
(rr,7/)=mapjinatrix•(i,y,1)
・否则,&y)'=map_matrix■(T,y,l)r
要变换稀疏矩阵,运用cxcore中的函数cvTransform。
WarpPerspectiveQMatrix
用4个对应点计算透视变换矩阵
CvMat*cvWarpPerspectiveQMatrix(constCvPoint2D32f*src,
constCvPoint2D32f*dst,
CvMat*map_matrix);
src
输入图像的四边形的4个点坐标
dst
输出图像的对应四边形的4个点坐标
map_matrix
输出的3X3矩阵
函数cvWarpPerspectiveQMatrix计算透视变换矩阵,使得:
(tix'i,tiy,i,ti)T=matrixe(xi,yi,1)T
其中dst(i)=(x,i,yi),src(i)=(xi,yi),i=0..3.
GetPerspectiveTransform
由四对点计算透射变换
CvMat*cvGetPerspectiveTransform(constCvPoint2D32f*src,const
CvPoint2D32f*dst,
CvMat*map_matrix);
ttdefinecvWarpPerspectiveQMatrixcvGetPerspectiveTransform
src
输入图像的四边形顶点坐标。
dst
输出图像的相应的四边形顶点坐标。
map_matrix
指向3X3输出矩阵的指针。
函数cvGetPerspectiveTransform计算满意以下关系的透射变换矩阵:
幻,=mapjniatrix•(g,%,1),
这里,dst{i)=(yi,yY),src(i)=(8,y),i=0..3.
Remap
对图像进行一般几何变换
voidcvRemap(constCvArr*src,CvArr*dst,
constCvArr*mapx,constCvArr*mapy,
intflags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalarfillval=cvScalarAll(0));
src
输入图像.
dst
输出图像.
mapx
x坐标的映射(32fClimage).
mapy
y坐标的映射(32fClimage).
flags
插值方法和以下开关选项的组合:
.CV_WARP_FILL_OUTLIERS-填充边界外的像素.假如输出图像的部
分象素落在爰换后的边界外,那么它们的值设定为fillvalo
fillval
用来填充边界外面的值.
函数cvRemap利用下面指定的矩阵变换输入图像:
dst(x,y)<-src(mapx(x,y),mapy(x,y))
与其它几何变换类似,可以运用一些插值方法(由用户指定,译者注:同
cvResize)来计算非整数坐标的像素值。
LogPolar
把图像映射到极指数空间
voidcvLogPolar(constCvArr*src,CvArr*dst,
CvPoint2D32fcenter,doubleM,
intflags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);
src
输入图像。
dst
输出图像。
center
变换的中心,输出图像在这里最精确。
M
幅度的尺度参数,见下面公式。
flags
插值方法和以下选择标记的结合
・CV_WARP_FILL_OUTLIERS-填充输出图像全部像素,假如这些点有和
外点对应的,则置零。
・CV_WARP_INVERSE_MAP-表示矩阵由输出图像到输入图像的逆变换,
异且因此可以干脆用于像素插值。否则,函数从map_matrix中找
寻逆变换。
fillval
用于填充外点的值。
函数cvLogPolar用以下变换变换输入图像:
正变换(CV_WARP」NVERSE_MAP未置位):
dst(phi,rho)<-src(x,y)
逆变换(CV_WARP_INVERSE_MAP置位):
dst(x,y)<-src(phi,rho),
这里,
rho=M*log(sqrt(x2+y2))
phi=atan(y/x)
此函数仿照人类视网膜中心凹视力,并且对于目标跟踪等可用于快速尺度和旋转
变换不变模板匹配。
Example.Log-polartransformation.
ttinclude<cv.h>
ttinclude<highgui.h>
intmain(intargc,char**argv)
{
IplImage*src;
if(argc==2&&(src=cvLoadImage(argv[l],1)!=0)
{
IplImageddst=cvCreatelmage(cvSize(256,256),8,3);
IplImage*src2=cvCreatelmage(cvGetSize(src),8,3);
cvLogPolar(src,dst,
cvPoint2D32f(src->width/2,src->height/2),
40,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);
cvLogPolar(dst,src2,
cvPoint2D32f(src->width/2,src->height/2),
40,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS+CV_WARP_INVERSE_MAP);
cvNamedWindow(〃log-polar〃,1);
cvShowImage("log-polar”,dst);
cvNamedWindow("inverselog-polar”,1);
cvShowImage("inverselog-polar”,src2);
cvWaitKey();
}
return0;
}
Andthisiswhattheprogramdisplayswhenopencv/samples/c/fruits.jpg
ispassedtoit
形态学操作
CreateStructuringElementEx
创建结构元素
IplConvKernel*cvCreateStructuringElementEx(
intcols,introws,intanchor_x,intanchor_y,
intshape,int*values=NULL);
cols
结构元素的列数目
rows
结构元素的行数目
anchor_x
锚点的相对水平偏移量
anchor_y
锚点的相对垂直偏移量
shape
结构元素的形态,可以是下列值:
・CV_SHAPE_RECT,长方形元素;
•CV_SHAPE_CROSS,交织元素across-shapedelement;
.CV_SHAPE_ELLIPSE,椭圆元素;
.CV_SHAPE_CUSTOM,用户自定义元素。这种状况下参数values定义
了mask,即象素的那个邻域必需考虑。
values
指向结构元素的指针,它是一个平面数组,表示对元素矩阵逐行扫描。(非
零点表示该点属于结构元)。假如指针为空,则表示平面数组中的全部元
素都是非零的,即结构元是一个长方形(该参数仅仅当shape参数是
CV_SHAPE_CUSTOM时才予以考虑)。
函数cvCreateStructuringElementEx安排和填充结构IplConvKernel,它可
作为形态操作中的结构元素。
ReleaseStructuringElement
删除结构元素
voidcvReleaseStructuringElement(IplConvKernel**element);
element
被删除的结构元素的指针
函数cvReleaseStructuringElement释放结构IplConvKernel。假如
*element为NULL,则函数不作用。
Erode
运用随意结构元素腐蚀图像
voidcvErode(constCvArr*src,CvArr*dst,IplConvKernel*element=NULL,
intiterations=l);
src
输入图像.
dst
输出图像.
element
用于腐蚀的结构元素。若为NULL,则运用3X3长方形的结构元素
iterations
腐蚀的次数
函数cvErode对输入图像运用指定的结构元素进行腐蚀,该结构元素确定每个
具有最小值象素点的邻域形态:
dst=erode(src,element):dst(x,y)=min((x',y')in
element))src(x+x',y+y')
函数可能是本地操作,不需另外开拓存储空间的意思。腐蚀可以重复进行
(iterations)次.对彩色图像,每个彩色通道单独处理。
Dilate
运用随意结构元素膨胀图像
voidcvDilate(constCvArr*src,CvArr*dst,IplConvKernel*element=NULL,
intiterations=l);
src
输入图像.
dst
输出图像.
element
用于膨胀的结构元素。若为NULL,则运用3X3长方形的结构元素
iterations
膨胀的次数
函数cvDilate对输入图像运用指定的结构元进行膨胀,该结构确定每个具有最
小值象素点的邻域形态:
dst=dilate(src,element):dst(x,y)=max((x',y')in
element))src(x+x',y+y')
函数支持(in-place)模式。膨胀可以重复进行(iterations)次.对彩色图像,
每个彩色通道单独处理。
MorphologyEx
高级形态学变换
voidcvMorphologyEx(constCvArr*src,CvArr*dst,CvArr*temp,
IplConvKernel*element,intoperation,int
iterations=l);
src
输入图像.
dst
输出图像.
temp
临时图像,某些状况下须要
element
结构元素
operation
形态操作的类型:
CV_M0P_0PEN-开运算
CV_M0P_CL0SE-闭运算
CV_MOP_GRADIENT-形态梯度
CV_M0P_T0PHAT-"顶帽"
CV_MOP_BLACKHAT-〃黑帽”
iterations
膨胀和腐蚀次数.
函数cvMorphologyEx在膨胀和腐蚀基本操作的基础上,完成一些高级的形态变
换:
开运算
dst=open(src,element)=dilate(erode(src,element),element)
闭运算
dst=close(src,element)=erode(dilate(src,element),element)
形态梯度
dst=morph_grad(src,element)=dilate(src,element)-erode(src,eleme
nt)
〃顶帽〃
dst=tophat(src,element)=src-open(src,element)
dst=blackhat(src,element)=close(src,element)-src
临时图像temp在形态梯度以及对“顶帽”和“黑帽”操作时的in-place模
式下须要。
滤波器与色调空间变换
Smooth
各种方法的图像平滑
voidcvSmooth(constCvArr*src,CvArr*dst,
intsmoothtype=CV_GAUSSIAN,
intparaml=3,intparam2=0,doubleparam3=0,double
param4=0);
src
输入图像.
dst
输出图像.
smoothtype
平滑方法:
•CV_BLUR_NO_SCALE(简洁不带尺度变换的模糊)-对每个象素的
paramlXparam2领域求和。假如邻域大小是变更的,可以事先利
用函数cvlntegral计算积分图像。
•CV_BLUR(simpleblur)-对每个象素paramlXparam2邻域求和
并做尺度变换1/(paramleparam2).
•CVGAUSSIAN(gaussianblur)-对图像进行核大小为
param1Xparam2的高斯卷积
•CVMEDIAN(medianblur)一对图像进行核大小为paramlXparaml
的中值滤波(i.e.邻域是方的).
•CV_BILATERAL(双向滤波)-应用双向3x3滤波,彩色
sigma=paraml,空间sigma=param2.关于双向滤波,可参考
param1
平滑操作的第一个参数.
param2
平滑操作的其次个参数.对于简洁/非尺度变换的高斯模糊的状况,假如
param2的值为零,则表示其被设定为paraml。
param3
对应高斯参数的Gaussiansigma(标准差).假如为零,则标准差由下面
的核尺寸计算:
sigma=(n/2-1)*0.3+0.8,其中n=paraml对应水平核,
n=param2对应垂直核.
对小的卷积核(3X3to7X7)运用如上公式所示的标准sigma速度会快。假
如param3不为零,而paraml和param2为零,则核大小有sigma计算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数据安全企业合规预案手册
- 关于2026年客户订单交付延期说明的确认函(6篇范文)
- 绿色可持续城市基础设施建设推进解决方案
- 产品创新与研发管理流程再造实战指南
- 建筑业绿色建筑设计师KPI考核表
- 医药销售人员业绩成果KPI考核表
- 市场调研竞争对手分析行业报告整合方案
- 2026新疆德源人力资源管理有限责任公司招聘管理助理岗人员18人参考题库附参考答案详解【典型题】
- 办公室设备维护保养指南
- 2026浙江宁波市鄞州区公立学校招聘编外员工模拟试卷及完整答案详解(必刷)
- (2026版)学校保密安全管理制度
- 市场监督管理局特种设备安全监察工作手册(标准版)
- 2026年留疆战士政策理解练习题及解析
- 高中数学必修一2.2基本不等式常见题型(含答案)
- 2026年贵州省六盘水市初二地生会考试卷题库及答案
- 20kV及以下配电网工程预算定额(2022版)全5册excel版
- 煤矿总工程师岗位职责及技术管理体系
- 城镇污水处理厂资产管理方案
- 二级营销员题库及答案
- 妇产科专科护理实践指南(2025年版)
- 3D数字游戏角色设计与制作(Maya)课件:材质制作
评论
0/150
提交评论