天天看點

Python Pillow(PIL 第三方子產品)和 cv2 (opencv第三方子產品)對圖檔的 resize 操作 (縮放圖檔大小)

PIL 子產品的 resize  操作:

1.  從檔案中讀取圖檔,然後  resize  大小:

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

img=Image.open(r"1.jpg")
print("原圖的height,weight分别為:", np.asarray(img).shape[:2])
plt.imshow(np.asarray(img))
plt.show()

height, weight = (np.asarray(img).shape)[:2]
height = height//10
weight = weight//10
img2 = Image.Image.resize(img, (weight, height))
print("resized後圖的height,weight分别為:", np.asarray(img2).shape[:2])
plt.imshow(np.asarray(img2))
plt.show()      
Python Pillow(PIL 第三方子產品)和 cv2 (opencv第三方子產品)對圖檔的 resize 操作 (縮放圖檔大小)
Python Pillow(PIL 第三方子產品)和 cv2 (opencv第三方子產品)對圖檔的 resize 操作 (縮放圖檔大小)

2.  從位元組碼(Bytes)中讀取圖檔,然後  resize  大小:

import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from io import BytesIO


img = open("1.jpg", "rb").read()   #讀取序列化的二進制碼
img = BytesIO( img )
img = Image.open( img )
print("原圖的height,weight分别為:", np.asarray(img).shape[:2])
plt.imshow(np.asarray(img))
plt.show()

height, weight = (np.asarray(img).shape)[:2]
height = height//10
weight = weight//10
img2 = Image.Image.resize(img, (weight, height))
print("resized後圖的height,weight分别為:", np.asarray(img2).shape[:2])
plt.imshow(np.asarray(img2))
plt.show()      

---------------------------------------------------

CV2 子產品的 resize  操作:

讀入圖像

使用函數cv2.imread()來讀取圖像。圖像應該在工作目錄中,或者應該給出圖像的完整路徑。

imread(filename[, flags]) -> retval

函數imread從指定檔案加載圖像并傳回一個numpy.ndarray對象類型像素值。 如果圖像無法讀取(由于檔案丢失,權限不當,格式不受支援或格式無效),函數傳回一個空矩陣

第二個參數是一個标志,用于指定應讀取圖像的方式。

  • cv2.IMREAD_COLOR:加載彩色圖像。圖像的任何透明度都将被忽略。這是預設标志。 flags=1
  • cv2.IMREAD_GRAYSCALE:以灰階模式加載圖像 flags=0
  • cv2.IMREAD_UNCHANGED:加載包含Alpha通道的圖像 flags=-1

注意

而不是這三個标志,你可以簡單地傳遞整數1,0或-1。

CV2 讀取圖檔,  CV2展示圖檔:

import matplotlib.pyplot as plt
import numpy as np
import cv2
# rgb圖
img=cv2.imread(r"1.jpg", 1)
# 灰階圖
#img=cv2.imread(r"1.jpg", 0)

print("原圖的height,weight分别為:", np.asarray(img).shape[:2])
#plt.imshow(np.asarray(img))
#plt.show()
cv2.imshow("img", mat=img)
cv2.waitKey (0)


height, weight = (img.shape)[:2]
height = height//3
weight = weight//3
img2 = cv2.resize(img, (weight, height))
print("resized後圖的height,weight分别為:", img2.shape[:2])
#plt.imshow(np.asarray(img2))
#plt.show()
cv2.imshow("img2", mat=img2)
cv2.waitKey (0)
cv2.destroyAllWindows()      

CV2 讀取圖檔,  matplotlib展示圖檔:   把cv2的bgr轉換為rgb,然後展示。       [...,::-1]

import matplotlib.pyplot as plt
import numpy as np
import cv2
# rgb圖
img=cv2.imread(r"1.jpg", 1)
# 灰階圖
#img=cv2.imread(r"1.jpg", 0)

print("原圖的height,weight分别為:", np.asarray(img).shape[:2])
plt.imshow(np.asarray(img)[...,::-1])
plt.show()


height, weight = (img.shape)[:2]
height = height//3
weight = weight//3
img2 = cv2.resize(img, (weight, height))
print("resized後圖的height,weight分别為:", img2.shape[:2])
plt.imshow(np.asarray(img2)[...,::-1])
plt.show()      
Python Pillow(PIL 第三方子產品)和 cv2 (opencv第三方子產品)對圖檔的 resize 操作 (縮放圖檔大小)

 1.jpg

注:上面的代碼均使用該圖檔(1.jpg)做測試。