iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 7

🚀 DAY 7:圖片翻轉與旋轉|flip、rotate

  • 分享至 

  • xImage
  •  

今天來學習如何翻轉與旋轉圖片,這在資料增強(Data Augmentation)時非常重要。
透過翻轉與旋轉,可以讓模型見到更多不同視角的影像,有助提升模型泛化能力。


🖼️ 測試圖片準備

和前幾天一樣,準備一張彩色圖片(image.jpg)放在同一資料夾:

import cv2

img = cv2.imread('image.jpg')

為了讓圖片停留讓我們可以觀察,記得最後要加上這段。

cv2.waitKey()
cv2.destroyAllWindows()

🔄 翻轉圖片

使用 cv2.flip() 可以將圖片做水平或垂直翻轉:

flip_horizontal = cv2.flip(img, 1)  # 水平翻轉(左右反轉)
flip_vertical = cv2.flip(img, 0)    # 垂直翻轉(上下顛倒)
flip_both = cv2.flip(img, -1)       # 同時水平和垂直翻轉(旋轉180度效果)

cv2.imshow("My Image", img)
cv2.imshow('Flip Horizontal', flip_horizontal)
cv2.imshow('Flip Vertical', flip_vertical)
cv2.imshow('Flip Both', flip_both)
  • 參數說明:
    • 1:水平翻轉
    • 0:垂直翻轉
    • -1:水平+垂直同時翻轉

翻轉圖片在資料增強和鏡像檢測等應用中非常實用。

翻轉後的範例如下圖:
翻轉圖片


⟳ 旋轉圖片

旋轉圖片需要先計算旋轉矩陣,再利用 cv2.warpAffine 做仿射變換:

h, w = img.shape[:2]  # 取得圖片高度與寬度
M = cv2.getRotationMatrix2D((w//2, h//2), 45, 1)  # 以圖片中心為軸,旋轉45度,縮放比例1
rotated = cv2.warpAffine(img, M, (w, h))  # 進行旋轉

cv2.imshow("My Image", img)
cv2.imshow("Rotated", rotated)
  • getRotationMatrix2D(center, angle, scale)

    • center:旋轉中心點(此例為圖片中心)
    • angle:旋轉角度(正值為逆時針方向)
    • scale:縮放比例(1表示不縮放)
  • warpAffine()

    • 根據旋轉矩陣對圖片做仿射變換,產生旋轉後的新圖片。

旋轉圖片常用於資料增強、圖像對齊和修正等任務。

旋轉後的範例如下圖:
旋轉圖片


📌 今日結語

  • cv2.flip() 是簡單有效的圖片翻轉方法,有水平、垂直和同時翻轉三種模式。
  • 利用旋轉矩陣與 cv2.warpAffine() 可以對圖片進行任意角度旋轉。
  • 這些幾何變換是資料增強中不可或缺的技巧,可以提升模型對不同視角的容錯率。
  • 實務中可結合縮放、平移等操作,打造更多樣化的訓練資料。

掌握圖片的翻轉與旋轉,讓你在影像前處理和資料增強方面更加靈活!


上一篇
🚀 DAY 6:圖片尺寸調整與比例縮放|resize、scale、保持比例
系列文
OpwnCV影像處理新手村7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言