--- tags: python, OpenCV, 物件導向, 影像處理, 邊緣偵測 --- # 利用Lapacian進行邊緣偵測 在[邊緣偵測](https://hackmd.io/@defu/edgedetection)中提到,可以利用OpenCV對影像做出邊緣偵測的運算,以下利用[python](使用python的基本概念)進行簡單的影像運算。 ## 使用影像 這次一樣使用經典圖片,萊娜圖。 <center> <img src="https://upload.wikimedia.org/wikipedia/zh/3/34/Lenna.jpg"> </center> ## 範例 1. 首先先匯入相關函式 ```py import cv2 import numpy as np import argparse ``` 其中,[`argparse`](argparse簡介)是一個內建模組主要用來完成文字命令列的一些操作,這裡就不多做說明。 2. 利用[`def`](python_def語句)先行撰寫一個顯示模組,主要讓不同的圖片均可輸入並顯示 ```python def display(windowsName,img): cv2.namedWindow(windowsName, cv2.WINDOW_NORMAL) #使視窗可調整,並命名 size = img.shape# 影像尺寸最佳化 h = size[0] w = size[1] while(True): if w>800 or h>800: w = int(w/2) h = int(h/2) else: break cv2.resizeWindow(windowsName,w,h) cv2.imshow(windowsName,img) cv2.waitKey(0) ``` 3. 讀取圖片並完成`Laplacian`完成邊緣計算 ```py ap = argparse.ArgumentParser() ap.add_argument('-i',required= True,help='Path to the image') args = vars(ap.parse_args()) image = cv2.imread(args['i'],flags=0) imagename = args['i'] display(imagename,image) lap = cv2.Laplacian(image, cv2.CV_64F)#將函數轉為浮點格式CV_64F lap = np.uint8(np.absolute(lap))#取得絕對值後轉為8bit資訊 lap = abs(255-lap) display('LAP',lap) ``` 4. 輸出圖片 ```py cv2.imwrite('.\\edge_lenna.png',lap) ``` <center><img src="https://github.com/edwardhome/Notebook/blob/main/opencv_test/edge_lenna.png?raw=true"></center> <center>輸出結果</center>