世界靜好 | 我心依然
opencv2
- 圖像類型:BGR
- 數(shù)據(jù)類型:numpy
- 元素類型:uint8
- 通道格式:H,W,C
import cv2
import numpy as np
img = cv2.imread('image.jpg') #讀取圖片
cv2.imshow('the window name',img) #顯示圖像
cv2.waitKey()
CV2.imwrite('new_image.jpg',img) #保存圖片
print(type(img)) #數(shù)據(jù)類型(numpy)
print(img.dtype) #元素類型(uint8)
print(img.shape) #通道格式(H,W,C)
print(img.size) #像素點(diǎn)數(shù)
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #BGR轉(zhuǎn)RGB
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #BGR轉(zhuǎn)灰度圖
gray = cv2.imread('image.jpg',cv2.IMREAD_GRAYSCALE) #灰度圖讀取
image = cv2.resize(img,(100,200),interpolation=cv2.INTER_LINEAR) #resize
b,g,r = cv2.split(img) #通道分離
merge_img = cv2.merge((b,g,r)) #通道合并
PIL
- 圖像類型:RGB
- 數(shù)據(jù)類型:Image
- 元素類型:uint8
- 通道格式:H,W,C
from PIL import Image
import numpy as np
img = Image.open('image.jpg') #讀取圖片
img.show() #展示圖片
print(img_pil.mode) #圖像類型
print(img_pil.size) #圖像的寬高
img_arr = np.array(img) #轉(zhuǎn)為numpy形式甘凭,(H,W,C)
new_img = Image.fromarray(img_arr) #再轉(zhuǎn)換為Image形式
new_img.save('newimage.jpg') #保存圖片
gary = Image.open('image.jpg').convert('L') #灰度圖
r,g,b = img.split() #通道的分離
img = Image.merge('RGB',(r,g,b)) #通道的合并
img_copy = img.copy() #圖像復(fù)制
img_resize = img.resize((w,h)) #resize
matplotlib
- 圖像類型:RGB
- 數(shù)據(jù)類型:numpy
- 元素類型:float
- 通道格式:H,W,C
import matplotlib.pyplot as plt
import numpy as np
img = plt.imread('image.jpg') #讀取圖片
plt.imshow(img)
plt.show()
plt.savefig('new_img.jpg') #保存圖片
img_r = img[:,:,0] #灰度圖
plt.imshow(img_r,cmap='Greys_r') #顯示灰度圖
Skimage
- 圖像類型:RGB
- 數(shù)據(jù)類型:numpy
- 元素類型:uint8(三原色)沸版,float64(resize后或者灰度圖演侯,且為0~1)
- 通道格式:H,W,C
import skimage
from skimage import io,transform
import numpy as np
image= io.imread('test.jpg',as_grey=False) #讀取圖片 False原圖,True灰度圖
print(type(img)) #數(shù)據(jù)類型(numpy)
print(img.dtype) #元素類型(uint8)
print(img.shape) #通道格式(H,W,C)
image = transform.resize(image,(h, w),order=1) # order默認(rèn)是1篓冲,雙線性
Pytorch.ToTensor
- 接受對(duì)象:PIL Image或者numpy.ndarray
- 接受格式:輸入為H*W*C
- 處理過程:自己轉(zhuǎn)換為C*H*W勒奇,再轉(zhuǎn)為float后每個(gè)像素除以255
各種庫(kù)之間的轉(zhuǎn)換
- Tensor轉(zhuǎn)為numpy:
np.array(Tensor)
- numpy轉(zhuǎn)為Tensor:
torch.from_numpy(numpy.darray)
- PIL.Image.Image換成numpy:
np.array(PIL.Image.Image)
- numpy轉(zhuǎn)成PIL.Image.Image:
注意:保證numpy.ndarray 轉(zhuǎn)換成np.uint8番川,numpy.astype(np.uint8),像素值[0,255]闹炉; 灰度圖像保證numpy.shape為(H,W),不能出現(xiàn)channels 這里需要np.squeeze()奢方。 彩色圖象保證numpy.shape為(H,W,3)```
- PIL.Image.Image轉(zhuǎn)換成Tensor:
彩色圖像 img2=Image.open('1.tif').convert('RGB') import torchvision.transforms as transforms trans=transforms.Compose([transforms.ToTensor()]) a=trans(img2) a=np.array(a) maxi=a.max() a=a/maxi*255 a=a.transpose(1,2,0).astype(np.uint8) b=Image.fromarray(a) b
- PIL.Image轉(zhuǎn)換成OpenCV
import cv2 from PIL import Image import numpy image = Image.open("1.jpg") image.show() img = cv2.cvtColor(np.array(image),cv2.COLOR_RGB2BGR) cv2.imshow("OpenCV",img) cv2.waitKey()
注釋:cv2寫圖像時(shí)搔扁,灰度圖像shape可以為(H,W)或(H,W,1)。彩色圖像(H,W,3)
要從numpy.ndarray得到PIL.Image.Image蟋字,灰度圖的shape必須為(H,W)稿蹲,彩色為(H,W,3)