利用 imread
讀入的圖片 img 就是 Numpy 的陣列,因此可以用索引的方式指定使用者欲輸出的圖片範圍,下面的 (x, y) 代表原圖裁切的起點,並且裁切長寬為 (w, h) 的新圖片
import cv2
img = cv2.imread('../OpenCV/meme.jpg')
x = 50
y = 50
w = 200
h = 200
mosaic = img[y:y+h, x:x+w] # 取得剪裁區域
cv2.imshow("new", mosaic)
cv2.waitKey(0)
cv2.flip(image, 0)
進行圖像翻轉,若參數為 0 垂直翻轉,為 1 水平翻轉,為 -1 垂直水平翻轉
cv2.transpose(image)
將圖像轉置(行列互換)
cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
將圖像旋轉 90 度
import cv2
img = cv2.imread('../OpenCV/meme.jpg')
flipped_image = cv2.flip(img, 1) # 水平翻轉
cv2.imshow('before',img)
cv2.imshow("after", flipped_image)
cv2.waitKey(0)
cv2.flip(img, 1)
水平翻轉
cv2.flip(img, 0)
垂直翻轉
cv2.flip(img, -1)
垂直水平翻轉
import cv2
img = cv2.imread('../OpenCV/meme.jpg')
flipped_image = cv2.transpose(img) # 將圖像轉置(行列互換)
cv2.imshow('before',img)
cv2.imshow("after", flipped_image)
cv2.waitKey(0)
import cv2
img = cv2.imread('../OpenCV/meme.jpg')
flipped_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) # 圖片旋轉 90 度
cv2.imshow('before',img)
cv2.imshow("after", flipped_image)
cv2.waitKey(0)
常用函數介紹:
cv2.blur(image, (w, h))
均值模糊,使用指定大小的卷積核來平滑圖像。每个像素的值會被其周圖像的平均值所替代
cv2.GaussianBlur(image, (5, 5), 0)
高斯模糊,使用高斯函數作為卷積核,對圖像進行模糊處理。相比均值模糊,高斯模糊能夠更好地保留圖像邊緣
cv2.medianBlur(image, 5)
中值模糊,使用指定大小的卷積核,將每個像素的值替換成其周圍像素的中值
<小百科>
卷積核(濾波器):是一個用於圖像處理的矩陣,它通過卷積操作應用於圖像的每個像素,產生不同的效果,如模糊、銳化、邊緣檢測等。
<補充>:若卷積核為 (5, 5) 表示會從左上到右下,逐個對每個像素進行處理,並使用其周圍的 5x5 區域進行模糊處理,這些像素的值會根據捲積核內的權重進行加權平均,得到新的像素值,並將這個新值賦給該位置的像素
高斯核:是一種在圖像處理中用於模糊化或平滑圖像的卷積核。其核心概念基於高斯分佈,即以高斯分佈為基礎的數學函數,形狀呈鐘形曲線。(高斯核必須為積數,這樣才能確保有明確的中心點)
<補充>:與普通的捲積核不同,這 5x5 個像素的值並不會被簡單平均,而是根據高斯分佈進行加權平均,但在這個區域中,離中心像素越近的像素,其權重越大,離得越遠的像素權重越小。高斯分佈可以確保中心的像素值對結果的影響最大,而邊緣的像素值影響較小
import cv2
img = cv2.imread('../OpenCV/meme.jpg')
blurred_image = cv2.blur(img, (5, 5))
cv2.imshow('Blurred Img', blurred_image)
cv2.destroyAllWindows()
import cv2
img = cv2.imread('../OpenCV/meme.jpg')
gaussian_blurred_image = cv2.GaussianBlur(img, (9, 9), 0) # 將高斯核設為 (9, 9) ,並把 sigmaX 設為 0,讓 OpenCV 自動計算合適的標準差
cv2.imshow('Before', img)
cv2.imshow('After', gaussian_blurred_image)
cv2.waitKey(0)
import cv2
img = cv2.imread('../OpenCV/meme.jpg')
median_blurred_image = cv2.medianBlur(img, 5)
cv2.imshow('Before', img)
cv2.imshow('After', median_blurred_image)
cv2.waitKey(0)
我將三種模糊化方式的卷積核與高斯核皆設為 7 ,以下為均值、高斯、中值模糊的差異