o1.1 Sobel o1.2 Laplace o1.3 Canny o1.4 PreCornerDetect o1.5 CornerEigenValsAndVecs o1.6 CornerMinEigenVal o1.7 CornerHarris o1.8 FindCornerSubPix钽酸锂晶片 o1.9 GoodFeaturesToTrack ∙2 采样、插值和几何变换 o2.1 InitLineIterator o2.2 SampleLine o2.3 GetRectSubPix o2.4 GetQuadrangleSubPix o2.5 Resize o2.6 WarpAffine o2.7 GetAffineTransform o2.8 2DRotationMatrix o2.9 WarpPerspective o2.10 WarpPerspectiveQMatrix 消息钩子 o2.11 GetPerspectiveTransform 按摩靠背o2.12 Remap o2.13 LogPolar ∙3 形态学操作 o3.1 CreateStructuringElementEx o3.2 ReleaseStructuringElement o3.3 Erode o3.4 Dilate o3.5 MorphologyEx ∙4 滤波器与彩空间变换 o4.1 Smooth o4.2 Filter2D o4.3 CopyMakeBorder o4.4 Integral o4.5 CvtColor o4.6 Threshold o4.7 AdaptiveThreshold ∙5 金字塔及其应用 o5.1 PyrDown o5.2 PyrUp ∙6 连接部件 o6.1 CvConnectedComp windows下刷bioso6.2 FloodFill o6.3 FindContours o6.4 StartFindContours o6.5 FindNextContour o6.6 SubstituteContour o6.7 EndFindContours o6.8 PyrSegmentation o6.9 PyrMeanShiftFiltering o6.10 Watershed o7.1 Moments o7.2 GetSpatialMoment o7.3 GetCentralMoment o7.4 GetNormalizedCentralMoment o7.5 GetHuMoments ∙8 特殊图像变换 o8.1 HoughLines o8.2 HoughCircles o8.3 DistTransform o8.4 Inpaint ∙9 直方图 o9.1 CvHistogram o9.2 CreateHist o9.3 SetHistBinRanges o9.4 ReleaseHist o9.5 ClearHist o9.6 MakeHistHeaderForArray o9.7 QueryHistValue_1D o9.8 GetHistValue_1D o9.9 GetMinMaxHistValue o9.10 NormalizeHist o9.11 ThreshHist o9.12 CompareHist o9.13 CopyHist o9.14 CalcHist o9.15 CalcBackProject o9.16 CalcBackProjectPatch o9.17 CalcProbDensity o9.18 EqualizeHist ∙10 匹配 o10.1 MatchTemplate o10.2 MatchShapes o10.3 CalcEMD2 |
|
梯度、边缘和角点
Sobel
使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分 void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_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),对应 3x3 Scharr 滤波器,可以给出比 3x3 Sobel 滤波更精确的结果。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 变换
void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 );
src
输入图像.
dst
输出图像.
aperture_size
核大小 (与 cvSobel 中定义一样).
函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶 x- 和 y- 差分,再求和:
对 aperture_size=1 则给出最快计算结果,相当于对图像采用如下内核做卷积:
类似于 cvSobel 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。
Canny
采用 Canny 算法做边缘检测
void cvCanny( const CvArr* image, CvArr* edges, double threshold1,
double threshold2, int aperture_size=3 );
image
单通道输入图像.
edges
单通道存储边缘的输出图像
threshold1
第一个阈值
threshold2
第二个阈值
aperture_size
Sobel 算子内核大小 (见 cvSobel).
函数 cvCanny 采用 CANNY 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。
∙注意事项:cvCanny只接受单通道图像作为输入。
∙外部链接:经典的canny自调整阈值算法的一个opencv的实现见在OpenCV中自适应确定canny算法的分割门限
PreCornerDetect
计算用于角点检测的特征图,
void cvPreCornerDetect( const CvArr* image, CvArr* corners, int aperture_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
计算图像块的特征值和特征向量,用于角点检测
void cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,
int block_size, int aperture_size=3 );