更新於 2024/01/29閱讀時間約 5 分鐘

[OpenCV基礎][Python]影像操作(讀取、顯示、保存、裁剪、旋轉、縮放)

本文將介紹影像基本操作包括:影像的讀取顯示保存,以及一些常見的操作裁剪旋轉縮放等。

語法介紹

讀取影像:

cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPyndarray形式表示。

支援多種常見影像格式:JPEG (.jpg, .jpeg),PNG (.png),BMP (.bmp),TIFF (.tiff, .tif)等

import cv2

# 讀取影像
image = cv2.imread('image.jpg')

顯示影像:

使用 cv2.imshow() 函數可以顯示影像。這通常與 cv2.waitKey()cv2.destroyAllWindows() 一同使用。

在使用 cv2.imshow() 顯示影像後,如果沒有 cv2.waitKey(),視窗會立即關閉。然而,如果使用 cv2.waitKey(0),它會等待直到任意鍵被按下,這樣你就有足夠的時間來觀察和檢查影像。

當你按下任意鍵之後,cv2.waitKey(0) 返回按鍵的ASCII值,然後程式繼續執行。

接下來,使用 cv2.destroyAllWindows() 來關閉所有OpenCV的視窗。

# 顯示影像
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

保存圖像:

# 保存影像
cv2.imwrite('path/to/save/image.jpg', image)

cv2.imwrite: 函數的參數為保存的檔案路徑和要保存的影像

'path/to/save/image.jpg': 這是指定要保存影像的檔案路徑,這裡假設檔案名稱image.jpg


裁剪影像:

這是使用NumPy切片(slicing)和索引(indexing)的方式來取出一部分影像。

# 裁剪影像的一部分
cropped_image = image[y_start:y_end, x_start:x_end]

y_starty_end垂直方向的起始和結束索引。

x_startx_end水平方向的起始和結束索引。


旋轉影像:

這是一個比較簡單的旋轉函式,但只能指定三個角度,若要其他角度就需使用cv2.warpAffine可參考另外一篇文章有詳細介紹[OpenCV基礎][Python]遮罩,旋轉,輪廓應用濾除斑點

import cv2

# 旋轉影像
angle = '90'
Rotate_list = {'90': 0, '180': 1, '270': 2}
Rotate_angle = Rotate_list.get(angle)

# 假設你已經有了一個讀取的影像 image
rotated_image = cv2.rotate(image, Rotate_angle)

縮放影像:

# 縮放影像
scaled_image = cv2.resize(image, (new_width, new_height))

new_widthnew_height 是新的寬度和高度。


程式實作範例_1

結合使用使用讀取,顯示,旋轉,保存圖像。

當使用 cv2.imwrite() 函數保存影像時,如果未指定完整的檔案路徑,則保存的位置將相對於當前工作目錄(current working directory,通常是執行程式的目錄)。

import cv2

# 讀取影像
image = cv2.imread('cat.jpg')

# 旋轉影像
angle = '90'
Rotate_list = {'90': 0, '180': 1, '270': 2}
Rotate_angle = Rotate_list.get(angle)

# 假設你已經有了一個讀取的影像 image
rotated_image = cv2.rotate(image, Rotate_angle)

# 顯示影像
cv2.imshow('Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存影像
cv2.imwrite('rotated_image_cat.jpg', rotated_image)

旋轉後的圖

保存後路徑


程式實作範例_2

結合縮放,左邊為原圖,右邊為縮放後的圖。

import cv2

# 讀取影像
image = cv2.imread('cat.jpg')

# 縮放 50 * 100

scaled_image = cv2.resize(image, (50, 100))

# 顯示影像
cv2.imshow('Image', scaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存影像
cv2.imwrite('scaled_image_cat.jpg', scaled_image)

縮放比較圖



歡迎加入我的沙龍,及追蹤,將持續更新跟OpenCV相關的內容喔~








分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.