1. 程式人生 > >Python中圖片基本處理操作

Python中圖片基本處理操作

使用python進行影象處理程式設計很方便,讀取圖片,顯示圖片,儲存圖片

1、opencv
2、PIL(pillow)
3、matplotlib
4、scipy
5、skimage

1、opencv圖片基本操作

圖片就是矩陣,矩陣就是圖片 真彩圖片是BGR格式
重要的事情說三遍:用opencv讀取的圖片格式是numpy!!!彩色圖片維度是(高度,寬度,通道數)!!!資料型別是uint8!!!
程式碼如下:

import cv2
import numpy as np  

img_name = r"C:\Users\Administrator\Desktop\machine_learning\face_study\pos\1.jpg"
img = cv2.imread(img_name) # 讀取圖片 cv2.imshow("figure1", img) # 顯示圖片 filename = img_name # 儲存圖片的檔案 cv2.imwrite(filename, img) # 儲存圖片 # h: 高 w: 寬 c: 通道數 h , w, c = img.shape print(img.shape) # (h, w, c) # 顯示影象的上面一半 cv2.imshow("figure1_up", img[0:(int)(h/2)]) # cv2.imshow("figure1_up", img[0:(int)(h/2),:,:]) # 等價於上面一行程式碼
cv2.waitKey()

opencv的坑

別跳!!!
opencv對於讀進來的圖片的通道排列是BGR,而不是主流的RGB!謹記!

#opencv讀入的矩陣是BGR,如果想轉為RGB,可以這麼轉
img4 = cv2.imread('1.jpg')
img4 = cv2.cvtColor(img4,cv2.COLOR_BGR2RGB)

2、PIL圖片處理基本操作

PIL是矩陣進行封裝的東西

from PIL import Image
import numpy as np

img = Image.open(img_name)
img.show() # 顯示圖片
gray = Image.open(img_name).convert('L') gray.show() print(img.format) print(img.size) # 注意,省略了通道 (w,h) print(img.mode) # L為灰度圖,RGB為真彩色,RGBA為加了透明通道 # pillow讀進來的圖片不是矩陣,我們將圖片轉換為矩陣 arr = np.array(img) print(arr.shape) print(arr.dtype) print(arr) # 矩陣再轉換為圖片 new_img = Image.fromarray(arr) new_img.save("1.jpg") cv2.waitKey()

3、matplotlib圖片操作教程

圖片就是矩陣,矩陣就是圖片 真彩圖片是RGB格式

plt.imread讀入的就是一個矩陣,跟opencv一樣,但彩圖讀進的是RGB,與opencv有區別

無論用什麼庫讀入函式,只要將讀入的圖片轉換為矩陣,就可以用matplotlib進行操作


import matplotlib.pyplot as plt
import numpy as np


img_name = r"C:\Users\Administrator\Desktop\machine_learning\face_study\pos\1.jpg"
image = plt.imread(img_name)   # 讀取圖片
plt.imshow(image)              # 顯示圖片
plt.axis('off')
plt.savefig("1.jpg")           # 儲存圖片
plt.show()


#plt.imread讀入的就是一個矩陣,跟opencv一樣,但彩圖讀進的是RGB,與opencv有區別
print(image.shape) # (h,w,c)
print(image.size)
print(image.dtype)
print(image)

說明:對於matplotlib矩陣就是圖片 圖片就是矩陣

import numpy as np
import matplotlib.pyplot as plt

img = np.zeros((2,2,3),dtype=np.uint8)

img[0,0] = [255,0,0]      # 紅色
img[0,1] = [0,255,0]      # 綠色
img[1,0] = [0,0,255]      # 藍色

plt.imshow(img)
plt.show()

這裡寫圖片描述