opencv中文手册

上传人:xgs****56 文档编号:9870580 上传时间:2020-04-08 格式:DOC 页数:73 大小:908KB
返回 下载 相关 举报
opencv中文手册_第1页
第1页 / 共73页
opencv中文手册_第2页
第2页 / 共73页
opencv中文手册_第3页
第3页 / 共73页
点击查看更多>>
资源描述
目录 1 梯度 边缘和角点 o 1 1 Sobel o 1 2 Laplace o 1 3 Canny o 1 4 PreCornerDetect o 1 5 CornerEigenValsAndVecs o 1 6 CornerMinEigenVal o 1 7 CornerHarris o 1 8 FindCornerSubPix o 1 9 GoodFeaturesToTrack 2 采样 插值和几何变换 o 2 1 InitLineIterator o 2 2 SampleLine o 2 3 GetRectSubPix o 2 4 GetQuadrangleSubPix o 2 5 Resize o 2 6 WarpAffine o 2 7 GetAffineTransform o 2 8 2DRotationMatrix o 2 9 WarpPerspective o 2 10 WarpPerspectiveQMatrix o 2 11 GetPerspectiveTransform o 2 12 Remap o 2 13 LogPolar 3 形态学操作 o 3 1 CreateStructuringElementEx o 3 2 ReleaseStructuringElement o 3 3 Erode o 3 4 Dilate o 3 5 MorphologyEx 4 滤波器与色彩空间变换 o 4 1 Smooth o 4 2 Filter2D o 4 3 CopyMakeBorder o 4 4 Integral o 4 5 CvtColor o 4 6 Threshold o 4 7 AdaptiveThreshold 5 金字塔及其应用 o 5 1 PyrDown o 5 2 PyrUp 6 连接部件 o 6 1 CvConnectedComp o 6 2 FloodFill o 6 3 FindContours o 6 4 StartFindContours o 6 5 FindNextContour o 6 6 SubstituteContour o 6 7 EndFindContours o 6 8 PyrSegmentation o 6 9 PyrMeanShiftFiltering o 6 10 Watershed 7 图像与轮廓矩 o 7 1 Moments o 7 2 GetSpatialMoment o 7 3 GetCentralMoment o 7 4 GetNormalizedCentralMoment o 7 5 GetHuMoments 8 特殊图像变换 o 8 1 HoughLines o 8 2 HoughCircles o 8 3 DistTransform o 8 4 Inpaint 9 直方图 o 9 1 CvHistogram o 9 2 CreateHist o 9 3 SetHistBinRanges o 9 4 ReleaseHist o 9 5 ClearHist o 9 6 MakeHistHeaderForArray o 9 7 QueryHistValue 1D o 9 8 GetHistValue 1D o 9 9 GetMinMaxHistValue o 9 10 NormalizeHist o 9 11 ThreshHist o 9 12 CompareHist o 9 13 CopyHist o 9 14 CalcHist o 9 15 CalcBackProject o 9 16 CalcBackProjectPatch o 9 17 CalcProbDensity o 9 18 EqualizeHist 10 匹配 o 10 1 MatchTemplate o 10 2 MatchShapes o 10 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 cvReleaseImage CornerEigenValsAndVecs 计算图像块的特征值和特征向量 用于角点检测 void cvCornerEigenValsAndVecs const CvArr image CvArr eigenvv int block size int aperture 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 计算梯度矩阵的最小特征值 用于角点检测 void cvCornerMinEigenVal const CvArr image CvArr eigenval int block size int aperture size 3 image 输入图像 eigenval 保存最小特征值的图像 与输入图像大小一致 block size 邻域大小 见讨论 cvCornerEigenValsAndVecs aperture size Sobel 算子的核尺寸 见 cvSobel 当输入图像是浮点数格式时 该参 数表示用来计算差分固定的浮点滤波器的个数 函数 cvCornerMinEigenVal 与 cvCornerEigenValsAndVecs 类似 但是它仅仅 计算和存储每个象素点差分相关矩阵的最小特征值 即前一个函数的 min 1 2 CornerHarris 哈里斯 Harris 角点检测 void cvCornerHarris const CvArr image CvArr harris responce int block size int aperture size 3 double k 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 精确角点位置 void cvFindCornerSubPix const CvArr image CvPoint2D32f corners int count CvSize win CvSize zero zone CvTermCriteria criteria image 输入图像 corners 输入角点的初始坐标 也存储精确的输出坐标 count 角点数目 win 搜索窗口的一半尺寸 如果 win 5 5 那么使用 5 2 1 5 2 1 11 11 大小的搜索窗口 zero zone 死区的一半尺寸 死区为不对搜索区的中央位置做求和运算的区域 它 是用来避免自相关矩阵出现的某些可能的奇异性 当值为 1 1 表示 没有死区 criteria 求角点的迭代过程的终止条件 即角点位置的确定 要么迭代数大于某 个设定值 或者是精确度达到某个设定值 criteria 可以是最大迭代 数目 或者是设定的精确度 也可以是它们的组合 函数 cvFindCornerSubPix 通过迭代来发现具有子象素精度的角点位置 或如 图所示的放射鞍点 radial saddle points 子象素级角点定位的实现是基于对向量正交性的观测而实现的 即从中央点 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 确定图像的强角点 void cvGoodFeaturesToTrack const CvArr image CvArr eig image CvArr temp image CvPoint2D32f corners int corner count double quality level double min distance const CvArr 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 初始化线段迭代器 int cvInitLineIterator const CvArr image CvPoint pt1 CvPoint pt2 CvLineIterator line iterator int connectivity 8 image 带采线段的输入图像 pt1 线段起始点 pt2 线段结束点 line iterator 指向线段迭代器状态结构的指针 connectivity 被扫描线段的连通数 4 或 8 函数 cvInitLineIterator 初始化线段迭代器 并返回两点之间的象素点数目 两个点必须在图像内 当迭代器初始化后 连接两点的光栅线上所有点 都可 以连续通过调用 CV NEXT LINE POINT 来得到 线段上的点是使用 4 连通或 8 连通利用 Bresenham 算法逐点计算的 例子 使用线段迭代器计算彩色线上象素值的和 CvScalar sum line pixels IplImage image CvPoint pt1 CvPoint pt2 CvLineIterator iterator int blue sum 0 green sum 0 red sum 0 int count cvInitLineIterator image pt1 pt2 for int i 0 i imageData y offset image widthStep x offset y image widthStep 3 sizeof uchar size of pixel printf d d n x y return cvScalar blue sum green sum red sum SampleLine 将图像上某一光栅线上的像素数据读入缓冲区 int cvSampleLine const CvArr image CvPoint pt1 CvPoint pt2 void buffer int connectivity 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 线段的连通方式 4 or 8 函数 cvSampleLine 实现了线段迭代器的一个特殊应用 它读取由 pt1 和 pt2 两点确定的线段上的所有图像点 包括终点 并存储到缓存中 GetRectSubPix 从图像中提取象素矩形 使用子象素精度 void cvGetRectSubPix const CvArr src CvArr dst CvPoint2D32f center 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 提取象素四边形 使用子象素精度 void cvGetQuadrangleSubPix const CvArr src CvArr dst const CvMat 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 为几何形变参数 映射矩阵为 其中在非整数坐标 的象素点值通过双线性变换得到 当函 数需要图像边界外的像素点时 使用重复边界模式 replication border mode 恢复出所需的值 多通道图像的每一个通道都单独计算 例子 使用 cvGetQuadrangleSubPix 进行图像旋转 include cv h include highgui h include math h int main int argc char argv IplImage src the first command line parameter must be image file name if argc 2 int delta 1 int angle 0 cvNamedWindow src 1 cvShowImage src src for float m 6 double factor cos angle CV PI 180 1 1 3 CvMat M cvMat 2 3 CV 32F m int w src width int h src height m 0 float factor cos angle 2 CV PI 180 m 1 float factor sin angle 2 CV PI 180 m 2 w 0 5f m 3 m 1 m 4 m 0 m 5 h 0 5f cvGetQuadrangleSubPix src dst cvNamedWindow dst 1 cvShowImage dst dst if cvWaitKey 5 27 break angle angle delta 360 return 0 Resize 图像大小变换 void cvResize const CvArr src CvArr dst int interpolation CV INTER LINEAR src 输入图像 dst 输出图像 interpolation 插值方法 CV INTER NN 最近邻插值 CV INTER LINEAR 双线性插值 缺省使用 CV INTER AREA 使用象素关系重采样 当图像缩小时候 该方法 可以避免波纹出现 当图像放大时 类似于 CV INTER NN 方法 CV INTER CUBIC 立方插值 函数 cvResize 将图像 src 改变尺寸得到与 dst 同样大小 若设定 ROI 函 数将按常规支持 ROI WarpAffine 对图像做仿射变换 void cvWarpAffine const CvArr src CvArr dst const CvMat map matrix int flags CV INTER LINEAR CV WARP FILL OUTLIERS CvScalar fillval cvScalarAll 0 src 输入图像 dst 输出图像 map matrix 2 3 变换矩阵 flags 插值方法和以下开关选项的组合 CV WARP FILL OUTLIERS 填充所有输出图像的象素 如果部分象 素落在输入图像的边界外 那么它们的值设定为 fillval CV WARP INVERSE MAP 指定 map matrix 是输出图像到输入图像 的反变换 因此可以直接用来做象素插值 否则 函数从 map matrix 得到反变换 fillval 用来填充边界外面的值 函数 cvWarpAffine 利用下面指定的矩阵变换输入图像 如果没有指定 CV WARP INVERSE MAP 否则 函数与 cvGetQuadrangleSubPix 类似 但是不完全相同 cvWarpAffine 要求 输入和输出图像具有同样的数据类型 有更大的资源开销 因此对小图像不太 合适 而且输出图像的部分可以保留不变 而 cvGetQuadrangleSubPix 可以精 确地从 8位图像中提取四边形到浮点数缓存区中 具有比较小的系统开销 而 且总是全部改变输出图像的内容 要变换稀疏矩阵 使用 cxcore 中的函数 cvTransform GetAffineTransform 由三对点计算仿射变换 CvMat cvGetAffineTransform const CvPoint2D32f src const CvPoint2D32f dst CvMat map matrix src 输入图像的三角形顶点坐标 dst 输出图像的相应的三角形顶点坐标 map matrix 指向 2 3输出矩阵的指针 函数 cvGetAffineTransform计算满足以下关系的仿射变换矩阵 这里 dst i x i y i src i xi yi i 0 2 2DRotationMatrix 计算二维旋转的仿射变换矩阵 CvMat cv2DRotationMatrix CvPoint2D32f center double angle double scale CvMat map matrix center 输入图像的旋转中心坐标 angle 旋转角度 度 正值表示逆时针旋转 坐标原点假设在左上角 scale 各项同性的尺度因子 map matrix 输出 2 3 矩阵的指针 函数 cv2DRotationMatrix 计算矩阵 1 center x center y center x 1 center y where scale cos angle scale sin angle 该变换并不改变原始旋转中心点的坐标 如果这不是操作目的 则可以通过调 整平移量改变其坐标 译者注 通过简单的推导可知 仿射变换的实现是首先将 旋转中心置为坐标原点 再进行旋转和尺度变换 最后重新将坐标原点设定为 输入图像的左上角 这里的平移量是 center x center y WarpPerspective 对图像进行透视变换 void cvWarpPerspective const CvArr src CvArr dst const CvMat map matrix int flags CV INTER LINEAR CV WARP FILL OUTLIERS CvScalar fillval cvScalarAll 0 src 输入图像 dst 输出图像 map matrix 3 3 变换矩阵 flags 插值方法和以下开关选项的组合 CV WARP FILL OUTLIERS 填充所有缩小图像的象素 如果部分象 素落在输入图像的边界外 那么它们的值设定为 fillval CV WARP INVERSE MAP 指定 matrix 是输出图像到输入图像的反 变换 因此可以直接用来做象素插值 否则 函数从 map matrix 得到反变换 fillval 用来填充边界外面的值 函数 cvWarpPerspective 利用下面指定矩阵变换输入图像 如果没有指定 CV WARP INVERSE MAP 否则 要变换稀疏矩阵 使用 cxcore 中的函数 cvTransform WarpPerspectiveQMatrix 用 4个对应点计算透视变换矩阵 CvMat cvWarpPerspectiveQMatrix const CvPoint2D32f src const CvPoint2D32f dst CvMat map matrix src 输入图像的四边形的 4个点坐标 dst 输出图像的对应四边形的 4个点坐标 map matrix 输出的 3 3 矩阵 函数 cvWarpPerspectiveQMatrix 计算透视变换矩阵 使得 tix i tiy i ti T matrix xi yi 1 T 其中 dst i x i y i src i xi yi i 0 3 GetPerspectiveTransform 由四对点计算透射变换 CvMat cvGetPerspectiveTransform const CvPoint2D32f src const CvPoint2D32f dst CvMat map matrix define cvWarpPerspectiveQMatrix cvGetPerspectiveTransform src 输入图像的四边形顶点坐标 dst 输出图像的相应的四边形顶点坐标 map matrix 指向 3 3输出矩阵的指针 函数 cvGetPerspectiveTransform计算满足以下关系的透射变换矩阵 这里 dst i x i y i src i xi yi i 0 3 Remap 对图像进行普通几何变换 void cvRemap const CvArr src CvArr dst const CvArr mapx const CvArr mapy int flags CV INTER LINEAR CV WARP FILL OUTLIERS CvScalar fillval cvScalarAll 0 src 输入图像 dst 输出图像 mapx x坐标的映射 32fC1 image mapy y坐标的映射 32fC1 image flags 插值方法和以下开关选项的组合 CV WARP FILL OUTLIERS 填充边界外的像素 如果输出图像的部 分象素落在变换后的边界外 那么它们的值设定为 fillval fillval 用来填充边界外面的值 函数 cvRemap 利用下面指定的矩阵变换输入图像 dst x y src mapx x y mapy x y 与其它几何变换类似 可以使用一些插值方法 由用户指定 译者注 同 cvResize 来计算非整数坐标的像素值 LogPolar 把图像映射到极指数空间 void cvLogPolar const CvArr src CvArr dst CvPoint2D32f center double M int flags 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 INVERSE 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 polar transformation include include int main int argc char argv IplImage src if argc 2 IplImage src2 cvCreateImage 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 inverse log polar 1 cvShowImage inverse log polar src2 cvWaitKey return 0 And this is what the program displays when opencv samples c fruits jpg is passed to it 形态学操作 CreateStructuringElementEx 创建结构元素 IplConvKernel cvCreateStructuringElementEx int cols int rows int anchor x int anchor y int shape int values NULL cols 结构元素的列数目 rows 结构元素的行数目 anchor x 锚点的相对水平偏移量 anchor y 锚点的相对垂直偏移量 shape 结构元素的形状 可以是下列值 CV SHAPE RECT 长方形元素 CV SHAPE CROSS 交错元素 a cross shaped element CV SHAPE ELLIPSE 椭圆元素 CV SHAPE CUSTOM 用户自定义元素 这种情况下参数 values 定 义了 mask 即象素的那个邻域必须考虑 values 指向结构元素的指针 它是一个平面数组 表示对元素矩阵逐行扫描 非零点表示该点属于结构元 如果指针为空 则表示平面数组中的所 有元素都是非零的 即结构元是一个长方形 该参数仅仅当 shape参数是 CV SHAPE CUSTOM 时才予以考虑 函数 cv CreateStructuringElementEx 分配和填充结构 IplConvKernel 它可 作为形态操作中的结构元素 ReleaseStructuringElement 删除结构元素 void cvReleaseStructuringElement IplConvKernel element element 被删除的结构元素的指针 函数 cvReleaseStructuringElement 释放结构 IplConvKernel 如果 element 为 NULL 则函数不作用 Erode 使用任意结构元素腐蚀图像 void cvErode const CvArr src CvArr dst IplConvKernel element NULL int iterations 1 src 输入图像 dst 输出图像 element 用于腐蚀的结构元素 若为 NULL 则使用 3 3 长方形的结构元素 iterations 腐蚀的次数 函数 cvErode 对输入图像使用指定的结构元素进行腐蚀 该结构元素决定每个 具有最小值象素点的邻域形状 dst erode src element dst x y min x y in element src x x y y 函数可能是本地操作 不需另外开辟存储空间的意思 腐蚀可以重复进行 iterations 次 对彩色图像 每个彩色通道单独处理 Dilate 使用任意结构元素膨胀图像 void cvDilate const CvArr src CvArr dst IplConvKernel element NULL int iterations 1 src 输入图像 dst 输出图像 element 用于膨胀的结构元素 若为 NULL 则使用 3 3 长方形的结构元素 iterations 膨胀的次数 函数 cvDilate 对输入图像使用指定的结构元进行膨胀 该结构决定每个具有 最小值象素点的邻域形状 dst dilate src element dst x y max x y in element src x x y y 函数支持 in place 模式 膨胀可以重复进行 iterations 次 对彩色图 像 每个彩色通道单独处理 MorphologyEx 高级形态学变换 void cvMorphologyEx const CvArr src CvArr dst CvArr temp IplConvKernel element int operation int iterations 1 src 输入图像 dst 输出图像 temp 临时图像 某些情况下需要 element 结构元素 operation 形态操作的类型 CV MOP OPEN 开运算 CV MOP CLOSE 闭运算 CV MOP GRADIENT 形态梯度 CV MOP TOPHAT 顶帽 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 element 顶帽 dst tophat src element src open src element 黑帽 dst blackhat src element close src element src 临时图像 temp 在形态梯度以及对 顶帽 和 黑帽 操作时的 in place 模 式下需要 滤波器与色彩空间变换 Smooth 各种方法的图像平滑 void cvSmooth const CvArr src CvArr dst int smoothtype CV GAUSSIAN int param1 3 int param2 0 double param3 0 double param4 0 src 输入图像 dst 输出图像 smoothtype 平滑方法 CV BLUR NO SCALE 简单不带尺度变换的模糊 对每个象素的 param1 param2 领域求和 如果邻域大小是变化的 可以事先利 用函数 cvIntegral 计算积分图像 CV BLUR simple blur 对每个象素 param1 param2邻域 求和 并做尺度变换 1 param1 param2 CV GAUSSIAN gaussian blur 对图像进行核大小为 param1 param2 的高斯卷积 CV MEDIAN median blur 对图像进行核大小为 param1 param1 的中值滤波 i e 邻域是方的 CV BILATERAL 双向滤波 应用双向 3x3 滤波 彩色 sigma param1 空间 sigma param2 关于双向滤波 可参考 http www dai ed ac uk CVonline LOCAL COPIES MANDUCHI1 B ilateral Filtering html param1 平滑操作的第一个参数 param2 平滑操作的第二个参数 对于简单 非尺度变换的高斯模糊的情况 如果 param2的值 为零 则表示其被设定为 param1 param3 对应高斯参数的 Gaussian sigma 标准差 如果为零 则标准差由下 面的核尺寸计算 sigma n 2 1 0 3 0 8 其中 n param1 对应水平核 n param2 对应垂直核 对小的卷积核 3 3 to 7 7 使用如上公式所示的标准 sigma 速度会快 如 果 param3 不为零 而 param1 和 param2 为零 则核大小有 sigma 计算 以 保证足够精确的操作 函数 cvSmooth 可使用上面任何一种方法平滑图像 每一种方法都有自己的特 点以及局限 没有缩放的图像平滑仅支持单通道图像 并且支持 8位到 16位的转换 与 cvSobel和 cvaplace相似 和 32位浮点数到 32位浮点数的变换格式 简单模糊和高斯模糊支持 1 或 3 通道 8 比特 和 32 比特 浮点图像 这两 种方法可以 in place 方式处理图像 中值和双向滤波工作于 1 或 3 通道 8 位图像 但是不能以 in place 方 式处理图像 中值滤波 中值滤波法是一种非线性平滑技术 它将每一象素点的灰度值设置为该 点某邻域窗口内的所有象素点灰度值的中值 实现方法 1 通过从图像中的某个采样窗口取出奇数个数据进行排序 2 用排序后的中值取代要处理的数据即可 中值滤波法对消除椒盐噪音非常有效 在光学测量条纹图象的相位分析处理方 法中有特殊作用 但在条纹中心分析方法中作用不大 中值滤波在图像处理中 常用于用来保护边缘信息 是经典的平滑噪声的方法 中值滤波原理 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术 中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个拎域中 各点值的中值代替 让周围的像素值接近的值 从而消除孤立的噪声点 方法 是去某种结构的二维滑动模板 将板内像素按照像素值的大小进行排序 生成 单调上升 或下降 的为二维数据序列 二维中值滤波输出为 g x y med f x k y l k l W 其中 f x y g x y 分别为原始图像和处理后 图像 W 为二维模板 通常为 2 2 3 3 区域 也可以是不同的的形状 如线状 圆形 十字形 圆环形等 高斯滤波 高斯滤波实质上是一种信号的滤波器 其用途是信号的平滑处理 我们知道数 字图像用于后期应用 其噪声是最大的问题 由于误差会累计传递等原因 很 多图像处理教材会在很早的时候介绍 Gauss滤波器 用于得到信噪比 SNR较高 的图像 反应真实信号 于此相关的有 Gauss Lapplace变换 其实就是为了 得到较好的图像边缘 先对图像做 Gauss平滑滤波 剔除噪声 然后求二阶导 矢 用二阶导的过零点确定边缘 在计算时也是频域乘积 空域卷积 滤波器就是建立的一个数学模型 通过这个模型来将图像数据进行能量转化 能量低的就排除掉 噪声就是属于低能量部分 其实编程运算的话就是一个模板运算 拿图像的八连通区域来说 中间点的像 素值就等于八连通区的像素值的均值 这样达到平滑的效果 若使用理想滤波器 会在图像中产生振铃现象 采用高斯滤波器的话 系统函 数是平滑的 避免了振铃现象 Filter2D 对图像做卷积 void cvFilter2D const CvArr src CvArr dst const CvMat kernel CvPoint anchor cvPoint 1 1 src 输入图像 dst 输出图像 kernel 卷积核 单通道浮点矩阵 如果想要应用不同的核于不同的通道 先用 cvSplit 函数分解图像到单个色彩通道上 然后单独处理 anchor 核的锚点表示一个被滤波的点在核内的位置 锚点应该处于核内部 缺 省值 1 1 表示锚点在核中心 函数 cvFilter2D 对图像进行线性滤波 支持 In place 操作 当核运算部分 超出输入图像时 函数从最近邻的图像内部象素插值得到边界外面的象素值 CopyMakeBorder 复制图像并且制作边界 void cvCopyMakeBorder const CvArr src CvArr dst CvPoint offset int bordertype CvScalar value cvScalarAll 0 src 输入图像 dst 输出图像 offset 输入图像 或者其 ROI 欲拷贝到的输出图像长方形的左上角坐标 或 者左下角坐标 如果以左下角为原点 长方形的尺寸要和原图像的尺 寸的 ROI分之一匹配 bordertype 已拷贝的原图像长方形的边界的类型 IPL BORDER CONSTANT 填充边界为固定值 值由函数最后一个参数指 定 IPL BORDER REPLICATE 边界用上下行或者左右列来复制填充 其他两种 IPL边界类型 IPL BORDER REFLECT 和 IPL BORDER WRAP 现已不支持 value 如果边界类型为 IPL BORDER CONSTANT的话 那么此为边界像素的值 函数 cvCopyMakeBorder拷贝输入 2维阵列到输出阵列的内部并且在拷贝区域的 周围制作一个指定类型的边界 函数可以用来模拟和嵌入在指定算法实现中的 边界不同的类型 例如 和 opencv中大多数其他滤波函数一样 一些形态学函 数内部使用复制边界类型 但是用户可能需要零边界或者填充为 1或 255的边 界 Integral 计算积分图像 void cvIntegral const CvArr image CvArr sum CvArr sqsum NULL CvArr tilted sum NULL image 输入图像 W H 单通道 8 位或浮点 32f 或 64f sum 积分图像 W 1 H 1 译者注 原文的公式应该写成 W 1 H 1 避免 误会 单通道 32 位整数或 double 精度的浮点数 64f sqsum 对象素值平方的积分图像 W 1 H 1 译者注 原文的公式应该写成 W 1 H 1 避免误会 单通道 32 位整数或 double 精度的浮点数 64f tilted sum 旋转 45度的积分图像 单通道 32 位整数或 double 精度的浮点数 64f 函数 cvIntegral 计算一次或高次积分图像 sum X Y image x y x X y Y sqsum X Y image x y 2 x X y Y tilted sum X Y image x y y Y x X y 利用积分图像 可以计算在某象素的上 右方的或者旋转的矩形区域中进行求 和 求均值以及标准方差的计算 并且保证运算的复杂度为 O 1 例如 因此可以在变化的窗口内做快速平滑或窗口相关等操作 CvtColor 色彩空间转换 void cvCvtColor const CvArr src CvArr dst int code src 输入的 8 bit 16 bit 或 32 bit 单倍精度浮点数影像 dst 输出的 8 bit 16 bit 或 32 bit 单倍精度浮点数影像 code 色彩空间转换 通过定义 CV 2 常数 见下面 函数 cvCvtColor 将输入图像从一个色彩空间转换为另外一个色彩空间 函数 忽略 IplImage 头中定义的 colorModel 和 channelSeq 域 所以输入图像的 色彩空间应该正确指定 包括通道的顺序 对 RGB空间而言 BGR 意味着布局 为 B0 G0 R0 B1 G1 R1 层叠的 24 位格式 而 RGB 意味着布局为 R0 G0 B0 R1 G1 B1 层叠的 24 位格式 函数做如下变换 RGB 空间内部的变换 如增加 删除 alpha 通道 反相通道顺序 到 16位 RGB 彩色或者 15位 RGB彩色的正逆转换 Rx5 Gx6 Rx5 以及到灰
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!