# 電算社資訊營 ## 第三天:圖像處理與人臉辨識 --- ## 講師:昱山 --- ## 目錄 * OpenCV 是什麼? * 影像的讀取與顯示 * 影像儲存與操作 * 圖像運算與繪圖 * 文字標註 * 臉部辨識與馬賽克處理(實作) --- # OpenCV 是什麼? * 全名:**Open Source Computer Vision Library** * 一個跨平台、開源的電腦視覺函式庫 * 用於:影像處理、人臉辨識、物件追蹤、手勢偵測...等 --- ## 安裝套件(Colab) ```python !pip install opencv-python !pip install opencv-contrib-python ``` --- # 影像基本操作 --- ## 讀取圖像 ```python import cv2 img = cv2.imread('圖片路徑') ``` --- ## 顯示圖像 ```python cv2.imshow("視窗名稱", img) # 需桌面 GUI 支援 ``` > 在 Colab 中無法使用 `imshow()`,需改用: ```python from google.colab.patches import cv2_imshow cv2_imshow(img) ``` --- ## 儲存圖像 ```python cv2.imwrite("儲存路徑.jpg", img) ``` --- ## 等待按鍵 & 關閉視窗 ```python cv2.waitKey(0) == ord('q') # 等待按下 q 鍵 cv2.destroyWindow("視窗名稱") cv2.destroyAllWindows() # 關閉所有視窗 ``` --- # 繪圖功能 --- ## 畫直線、矩形、圓形 ```python cv2.line(img, (x1, y1), (x2, y2), (255, 0, 0), 2) cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 3) cv2.circle(img, (cx, cy), r, (0, 0, 255), -1) # 實心 ``` --- ## 橢圓、多邊形 ```python cv2.ellipse(img, (cx, cy), (40, 20), 0, 0, 360, (255,255,0), 2) pts = np.array([[100,50],[200,80],[150,150]], np.int32) cv2.polylines(img, [pts], isClosed=True, color=(0,255,255), thickness=2) ``` --- ## 加入文字 ```python cv2.putText(img, "Hello OpenCV", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0, 0, 0), 2) ``` --- # 圖像運算 --- ## 圖片加法、減法(疊圖) ```python img1 = cv2.imread('img1.jpg') img2 = cv2.imread('img2.jpg') result = cv2.addWeighted(img1, 0.5, img2, 0.5, 0) ``` --- ## 區域遮罩與裁切 ```python roi = img[100:200, 150:250] # 裁切區域 img[0:100, 0:100] = roi # 貼到新位置 ``` --- # 臉部辨識與馬賽克 --- ## 前置作業 ```python import cv2 from google.colab.patches import cv2_imshow from google.colab import files ``` * 上傳圖片: ```python uploaded = files.upload() ``` --- ## 灰階處理 + 載入模型 ```python img = cv2.imread('mona.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") faces = face_cascade.detectMultiScale(gray, 1.2, 3) ``` --- ## 馬賽克處理程式碼 ```python for (x, y, w, h) in faces: mosaic = img[y:y+h, x:x+w] mosaic = cv2.resize(mosaic, (w//15, h//15), interpolation=cv2.INTER_LINEAR) mosaic = cv2.resize(mosaic, (w, h), interpolation=cv2.INTER_NEAREST) img[y:y+h, x:x+w] = mosaic cv2.imwrite("amoo.jpg", img) cv2_imshow(img) ```
{"title":"電算社資訊營第三天","description":"OpenCV 是什麼?","contributors":"[{\"id\":\"b831f9fa-52bb-4a09-bfbb-148e4fdadd0f\",\"add\":2518,\"del\":147,\"latestUpdatedAt\":1755218214588}]"}
    151 views