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