拉普拉斯變換

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章