laplace变换 ----边缘检测

Laplace

计算图像的 Laplacian 变换

void cvLaplace( const CvArr* src, CvArr* dst, intaperture_size=3 );

src

输入图像.

dst

输出图像.

aperture_size

核大小 (与 cvSobel 中定义一样).

函数 cvLaplace 计算输入图像的 Laplacian变换,方法是先用 sobel 算子计算二阶 x- 和 y- 差分,再求和:

对 aperture_size=1 则给出最快计算结果,相当于对图像采用如下内核做卷积:

类似于 cvSobel 函数,该函数也不作图像的尺度变换,所支持的输入、输出图像类型的组合和cvSobel一致。

注意:

    openCV里面拉普拉斯变换要求输出图像的深度比输入图像深度要大。如输入深度为8则输出应该为16;如果深度不对的话会报错。使用cvConvertScaleAbs将生成的16位图像转换为8位(说明最下边)。

例:

#include <highgui.h>

#include <cv.h>

int main(int argc, char ** argv)

{

       IplImage*src, *dst;

       src= cvLoadImage( argv[1] );

       dst= cvCreateImage( cvGetSize( src ), IPL_DEPTH_16S, 3 );

       cvNamedWindow("src", 0 );

       cvShowImage("src", src );

       cvNamedWindow("Laplace", 0 );

       cvLaplace(src, dst, 7 ); //拉普拉斯变换,边缘检测

       cvShowImage("Laplace", dst );

       cvWaitKey(0);

       cvReleaseImage(&src );

       cvReleaseImage(&dst );

        return 0;

}

结果:

 

cvConvertScaleAbs

该函数是OpenCV中的函数。   函数作用:

使用线性变换转换输入数组元素成8位无符号整型

函数原型:

void cvConvertScaleAbs( const CvArr* src, CvArr*dst, double scale=1, double shift=0 );

#define cvCvtScaleAbs cvConvertScaleAbs

其中参数含义:

src : 原数组

dst :输出数组 (深度为 8u).

scale :比例因子.

shift :原数组元素按比例缩放后添加的值。

函数 cvConvertScaleAbs 与前一函数是相同的,但它是存贮变换结果的绝对值:

dst(I)=abs(src(I)*scale + (shift,shift,...))

函数只支持目标数数组的深度为 8u (8-bit 无符号) , 对于别的类型函数仿效于cvConvertScale 和 cvAbs 函数的联合 。

 转自:http://wenku.baidu.com/view/d1b259d150e2524de5187ebd.html

你可能感兴趣的:(C++,opencv,边缘检测,拉普拉斯变换)