本篇將介紹如何使用 Python 搭配 OpenCV 來 resize 縮放圖片,在寫 python 影像處理程式時常常會用到 opencv cv2.resize 圖片縮放的功能,接下來介紹怎麼使用 python 搭配 OpenCV 模組來進行圖片縮放 resize。
使用範例
以下 python 範例 ShengYu 是將 lena.jpg 讀取進來後,使用 opencv cv2.resize 進行縮放,從原本的512x512大小縮放成256x256 的大小。1
2
3
4
5
6
7
8#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
image = cv2.imread('lena.jpg')
image = cv2.resize(image, (256, 256), interpolation=cv2.INTER_AREA)
cv2.imshow('Result', image)
cv2.waitKey(0)
結果如下圖所示:
參數說明
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
interpolation | 說明 |
---|---|
INTER_NEAREST | 最近鄰插值 |
INTER_LINEAR | 雙線性插值(預設) |
INTER_AREA | 使用像素區域關係進行重採樣。它可能是圖像抽取的首選方法,因為它會產生無雲紋理(波紋)的結果。 但是當圖像縮放時,它類似於INTER_NEAREST方法。 |
INTER_CUBIC | 4x4像素鄰域的雙三次插值 |
INTER_LANCZOS4 | 8x8像素鄰域的Lanczos插值 |
cv2.resize 參數的詳細細節請參考這裡
OpenCV cv2.resize 提供五種方式的結果比較
下面的例子將 cv2.resize 所提供的所有種類都使用看看,來互相比較之間的差異,
我們先 resize 縮小成 400x400 的大小 來比較看看,
例子中還使用了 matplotlib 的方式將有圖片一起呈現在同一個視窗內,關於 matplotlib 的使用可以看看這篇,
其中 matplotlib 的 imshow 圖片是使用RGB排列方式,所以這邊我們將 opencv 的 BGR 排列作個轉換,
這樣在 matplotlib 上顏色顯示才會正確。
1 | #!/usr/bin/env python3 |
結果如下圖所示,從下列結果圖發現,使用 INTER_NEAREST 會有些微地鋸齒狀,在圖片中的帽緣與鏡子邊緣上的線條可以發現,
INTER_NEAREST 是最簡單的插值方法,且速度快,但也容易出現鋸齒的現象。
OpenCV cv2.resize 這五種方式在速度上的比較
由快到慢排序:INTER_NEAREST > INTER_CUBIC > INTER_LINEAR > INTER_AREA > INTER_LANCZOS4
這是以我的電腦的測試數據,每次跑的結果都不太一樣,但整體速度排序來說差不多,1
2
3
4
5INTER_NEAREST: 0.000447 seconds
INTER_LINEAR: 0.000673 seconds
INTER_AREA: 0.001684 seconds
INTER_CUBIC: 0.000482 seconds
INTER_LANCZOS4: 0.003038 seconds
總結
如果是要縮小圖片的話,通常 INTER_AREA 使用效果較佳。
如果是要放大圖片的話,通常 INTER_CUBIC 使用效果較佳,次等則是 INTER_LINEAR。
如果要追求速度的話,通常使用 INTER_NEAREST。
其它參考
opencv: 图像缩放(cv2.resize)_人工智能JNing-CSDN博客
https://blog.csdn.net/JNingWei/article/details/78218837
Python-OpenCV中的resize()函数 - Rogn - 博客园
https://www.cnblogs.com/lfri/p/10596530.html
OpenCV圖像縮放resize各種插值方式的比較人工智能_pan_jinquan的博客-CSDN博客
https://blog.csdn.net/guyuealian/article/details/85097633
其它相關文章推薦
如果你在學習 Python 或 OpenCV 影像處理相關技術,可以參考看看下面的文章,
Python OpenCV 彩色轉灰階(RGB/BGR to GRAY)
Python OpenCV 彩色轉HSV(RGB/BGR to HSV)
Python OpenCV 彩色轉YCbCr(RGB/BGR to YCbCr)
Python OpenCV 影像邊緣偵測 Canny Edge Detection
Python OpenCV 顯示camera攝影機串流影像
Python OpenCV 垂直vconcat 和水平hconcat 影像拼接
Python 旋轉圖片 rotate
Python 圖片模糊化 blur
Python 新手入門教學懶人包
小專案 Python OpenCV 圖片轉字元圖畫