#include
#include
int main()
{
//宣告變數
IplImage * img = 0;
img=cvLoadImage("img.jpg");
IplImage * pImage = NULL;
IplImage * pImgLaplace = NULL;
IplImage * pImg8u = NULL;
IplImage * pImg8uSmooth = NULL;
//將以讀入系統的圖像複製一份
pImage = cvCloneImage(img);
//建立和原始圖像一樣的圖像內存區,圖像元素的位深度設為IPL_DEPTH_8U
pImg8u = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
pImg8uSmooth = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
//將圖像轉換成灰度圖像
cvCvtColor(pImage,pImg8u,CV_BGR2GRAY);
//對灰度圖像進行高斯濾波
cvSmooth(pImg8u,pImg8uSmooth,CV_GAUSSIAN,3,0,0);
//此函數和cvSobel函數一樣要求目標圖像必須是16bit圖像
//如果給8bit目標圖像會報錯
pImgLaplace = cvCreateImage(cvGetSize(img),IPL_DEPTH_16S,1);
cvLaplace(pImg8uSmooth,pImgLaplace,3);
//將圖像格式再轉換回來,用於顯示
cvConvertScaleAbs(pImgLaplace,pImg8u,1,0);
//創建窗口
cvvNamedWindow("laplace gray Image",1);
//顯示圖像
cvvShowImage("laplace gray Image",pImg8u);
//等待按鍵
cvWaitKey(0);
//銷毀窗口
cvDestroyWindow("laplace gray Image");
//將程式開始時所使用的變數釋放
cvReleaseImage(& pImage);
cvReleaseImage(& pImgLaplace);
cvReleaseImage(& pImg8u);
cvReleaseImage(& pImg8uSmooth);
}
主要是先用高斯函數將圖像平滑化,然後再用Laplace進行運算
cvSmooth(pImg8u,pImg8uSmooth,CV_GAUSSIAN,3,0,0);
回覆刪除雖然研究過,可是還是不太懂smooth的用意