OpenCV中图像处理函数

来源:互联网 发布:如何测试网络稳定 编辑:程序博客网 时间:2024/05/22 07:43

1。滤波 Filtering
filter2D() 用核函数对图像做卷积

sepFilter2D() 用分解的核函数对图像做卷积。首先,图像的每一行与一维的核kernelX做卷积;然后,运算结果的每一列与一维的核kernelY做卷积

boxFilter() 就是滑动窗口平均滤波的二维版。
GaussianBlur() 高斯平均,也就是高斯模糊。
medianBlur() 中值滤波,个人最爱的滤波函数。
bilateralFilter() 双线性滤波。
前面这四个函数是原来OpenCV里的cvSmooth()取不同参数的应用。
Sobel() 使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分。
Scharr() 计算一阶导,x方向或y方向,以前这个方法是放在cvSobel里的。
Laplacian() 拉普拉斯变换。
erode(), dilate() 腐蚀、膨胀。

示例:

filter2D(image, image, image.depth(), (Mat<float>(3,3)<<-1, -1, -1, -1, 9, -1, -1, -1, -1), Point(1,1), 128);

构造了一个如下所示的核对图像做卷积:
-1 -1 -1
-1 9 -1
-1 -1 -1
核的锚点在(1,1)位置,卷积之后每个像素加上128.
2。几何变换 Geometrical Transformations
resize() 改变图像尺寸,可以指定x方向和y方向上的缩放比例,可以指定插值方法。
getRectSubPix() 以亚像素精度从图像中提取矩形。 dst(x,y)=src(x+center.x-(dst.cols-1)*0.5,y+center.y-(dst.rows-1)*0.5) 其中非整数象素点坐标采用双线性插值提取。
warpAffine() 仿射变换。
warpPerspective() 透射变换。
remap() 几何变换。
convertMaps() 将图像从一种类型,转换成另一种类型。

示例:

Mat dst;resize(src, dst, Size(), 1./sqrt(2), 1./sqrt(2)); // 把图像缩小到原来的根号二分之一。

3。 图像变换 Various Image Transformations
cvtColor()色彩空间转换。这个函数可以用于把CCD的raw格式转换为RGB,请参考,但是不能用于把灰度图转成伪彩图,请参考。
threshold() 二值化,常用操作,一般应用时建议用大津算法,即使用THRESH_OTSU参数。
adaptivethreshold() 自适应阈值的二值化。
floodFill() 填充连通域。
integral() 计算积分图像,一次或者二次。
distanceTransform() 距离变换,对原图像的每一个像素计算到最近非零像素的距离。
watershed() 分水岭图像分割。
grabCut()
一种彩色图像分割算法,效果可以参考这里。See the samples watershed.cpp and grabcut.cpp.
4。 直方图 Histograms
calcHist() 计算直方图。
calcBackProject() 计算反向投影。
equalizeHist() 灰度图像的直方图均衡化,常用操作。
compareHist() 比较两个直方图。
例子:计算图像的色调-饱和度直方图。

Mat hsv, H;cvtColor(image, hsv, CVBGR2HSV);int planes[]=f0, 1g, hsize[] = f32, 32g;calcHist(&hsv, 1, planes, Mat(), H, 2, hsize, 0);
0 0
原创粉丝点击