void cvLaplace(const CvArr * src,CvArr * det , int apertureSize=3)
該函數通常把原圖像和目標圖像以及中孔大小作爲變量。
原圖像可以是8位(無符號)圖像,也可以是32位(浮點)圖像。而目標圖像必須是16位(有符號)或者32位(浮點)圖像。
這裏的中孔與Sobel導數中出現的中孔完全一樣。
拉普拉斯算子通常可用於各種情況。一個通常的應用是檢測“團塊”。
拉普拉斯算子的形式是沿着x軸和y軸的二次導數的和,這就意味着周圍是更高值的單點或者小塊(比中孔小)會將使這個函數值最大化。反過來說,周圍是更低值的點將會使函數的負值最大化。此外拉普拉斯算子也可以用於邊緣檢測。
下面一《學習OpenCV》第六章第六題爲例進行應用說明:
6、找到並載入一幅正面人臉圖像,眼睛是睜開的,並且佔了圖像的大部分區域,寫出代碼找出眼睛的瞳孔:
int main(int argc, const char * argv[]) {
/*1、加載一幅灰度圖像*/
const char filename[] = "/Users/linwang/Downloads/girl.jpeg";
IplImage * Img = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);
/*2、縮小一倍*/
IplImage *out = cvCreateImage(cvSize(Img->width/2,Img->height/2), Img->depth, Img->nChannels);
cvResize(Img, out);
cvShowImage("1/2 Src", out);
/*3、拉普拉斯變換:算子足夠大*/
IplImage * Ilaplace = cvCreateImage(cvGetSize(out), IPL_DEPTH_16S, 1);
cvLaplace(out, Ilaplace, 15); //拉普拉斯變換
cvShowImage("Laplace", Ilaplace);
cvWaitKey(0);
cvReleaseImage(&Img);
cvReleaseImage(&out);
cvReleaseImage(&Ilaplace);
return 0;
}