OpenCV resize 修改圖片大小 (縮放), 旋轉

應用篇

這篇文章是要來介紹如何使用openCV來修改圖片大小以及選轉,在機械學習上很常用到。

修改圖片大小(縮放)

在修改圖片大小時我們會用到cv2.resize()這個函數。這個函數可以指定你想要的圖片大小。那我們來看看範例代碼吧!

import cv2 
import numpy as np

# 讀取圖片
img = cv2.imread('image.png')

# 修改大小
img = cv2.resize(img, (150, 150))  # 將大小修改成250*250

# 儲存圖片
cv2.imwrite('resize.jpg', img)

上面的代碼是在圖片與python檔案在同一個位置時使用的代碼。如果圖片與python檔案位置不同或是想要做修改大小以外的處理的話可以參考下面的代碼。

import os
import cv2
import numpy as np

def main():
    data_dir_path = u"directory的位置"
    file_list = os.listdir(r'./directory的位置')
    count = 0
    for file_name in file_list:
        root, ext = os.path.splitext(file_name)
        if ext == u'.png' or u'.jpeg' or u'.jpg':
            abs_name = data_dir_path + '/' + file_name
            image = cv2.imread(abs_name)
            #在下面寫要做的處理 在這邊是做修改圖片大小的處理
            img = cv2.resize(image, (150, 150)) #把圖片的大小改成150*150
            cv2.imwrite(abs_name, img)          
if __name__ == '__main__':
    main()

將圖片大小修改成150*150之後我們會看到圖片大小的差異。

原本大小:

修改過後:

旋轉

當旋轉角度為θ時,我們會用到下面的旋轉矩陣。

R(\theta )={\begin{bmatrix}\cos \theta &-\sin \theta \\\sin \theta &\cos \theta \\\end{bmatrix}}

但是在使用Python的OpenCV旋轉時,圖片的中心也會跟著旋轉。因此我們在用OpenCV旋轉時要先定義圖片的中心。另外我們在旋轉圖片時會用到cv2.getRotationMatrix2D()以及cv2.warpAffine這兩個函數。

cv2.getRotationMatrix2D()中有三個主要參數,分別是cv2.getRotationMatrix2D(center, angle, scale)。第一個參數center就是要定義圖片的中心,第二個angle則是定義旋轉角度,第三個則是定義圖片的縮放比例。關於warpAffine函數以後會再做詳細說明。那我們來看看範例代碼吧!

import cv2 
import numpy as np


# 讀取圖片
img = cv2.imread('image.png')

# 定義圖片的高度
height = img.shape[0]
# 定義圖片的寬度
width = img.shape[1]
# 定義圖片的中心
center = (int(height/2), int(width/2))

# 指定旋轉角度
angle = 60.0

# 指定縮放比例
scale = 1.0


# 旋轉
trans = cv2.getRotationMatrix2D(center, angle, scale)
image2 = cv2.warpAffine(img, trans, (width, height))

# 儲存圖片
cv2.imwrite('image2.jpg', image2)

將圖片旋轉60度後我們會獲得下面的圖片!

旋轉前:

旋轉後:

我們可以確認到圖片以逆時針旋轉了60度!

留言