四、图像处理(呵呵,重头戏来了) 1. 滤波 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. 几何变换 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. 图像变换 cvtColor()色彩空间转换。顺便提一句,这个函数可以用于把CCD的raw格式转换为RGB,请参考:但是不能用于把灰度图转成伪彩图,请参考: threshold()二值化,常用操作,一般应用时建议用大津算法,即使用THRESH_OTSU参数。 adaptivethreshold()自适应阈值的二值化。 floodFill()填充连通域。 integral()计算积分图像,一次或者二次。 distanceTransform()距离变换,对原图像的每一个像素计算到最近非零像素的距离。 watershed()分水岭图像分割。 grabCut()一种彩色图像分割算法,效果可以参考这里: 4. 直方图 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);计算图像的色调-饱和度直方图。 sume 2013/1/5