1、關於python中size與shape的用法,我一直是一頭霧水,今天總結下,size既可以用作屬性亦可以當做函數來使用,如a.size,np.szie(a),它是用來判斷數組中所有元素的個數
,而shap與size類似,既可以用作屬性亦可以當做函數來使用,如b.shape,np.shape(b),他是用來判斷數組的維度
2、關於圖像的加載與顯示,plt.imshow與cv2.imshow顯示的時候會有色差的問題,因為OpenCV顯示的BGR,而plt.imshow顯示的是RGB
3、通道的分離與融合分別是OpenCV中的split與merge函數
4、通過scipy.misc方法將圖片轉換成數組格式
1 #!/usr/bin/env python 3.6 2 #_*_coding:utf-8 _*_ 3 #@Time :2019/12/25 21:42 4 #@Author :控制工程小小白 5 #@FileName: RGB_split_merge.py 6 7 #@Software: PyCharm 8 from PIL import Image 9 import cv2 10 from scipy import misc 11 from matplotlib import pyplot as plt 12 import numpy as np 13 image_PIL=Image.open("our happy time.jpg")#打開圖片 14 """判斷圖像類型並使用size,shape 用法""" 15 """---------------------------------------------------------------------""" 16 print(type(image_PIL))#此時的image不是數組格式,而是圖片格式 17 image_numpy=misc.imread("our happy time.jpg")#通過scipy.misc方法將圖片轉換成數組格式 18 print(image_numpy) 19 print(type(image_numpy))#此時的輸出是數組格式 20 print(np.size(image_numpy))#size既可以用作對象的屬性a.size,也可以用作方法np.size(a),輸出數組的元素的所有個數 21 print(image_numpy.size) 22 print(np.shape(image_numpy))#與size一樣,既可以用作對象的屬性a.shape,也可以用作方法np.shape(a),輸出數組的維度 23 print(image_numpy.shape) 24 """---------------------------------------------------------------------------------------""" 25 """對於采用Image方法類讀取並且顯示圖片時,下面4行一般配套使用""" 26 plt.figure('jiaqi')#打開顯示的窗口並給顯示的窗口命名 27 plt.imshow(image_PIL)#imshow方法顯示要顯示的圖片,如果沒有plt.show()的配套使用,將不會顯示圖橡 28 plt.axis('on')#顯示坐標軸 29 plt.show()#與plt.imshow配套使用 30 """---------------------------------------------------------------------------""" 31 """opencv 加載與顯示與保存圖像""" 32 image_opencv=cv2.imread("our happy time.jpg")#是用OpenCV方法打開圖像 33 cv2.namedWindow('our happy time.jpg',cv2.WINDOW_NORMAL)#創建一個顯示窗口並命名 34 cv2.imshow('our happy time.jpg',image_opencv)#在這里需要注意OpenCV顯示的圖像與matplotlib顯示的圖像會有色差問題 35 #因為plt.show()接口是RGB,而OpenCV是BGR 36 plt.imshow(image_opencv)#注意這個是用OpenCV讀取圖像,但是是用matplotlib顯示圖像,個人覺得這個比cv2.imshow()顯示效果要好 37 plt.show() 38 cv2.namedWindow('OpenCV_image',cv2.WINDOW_NORMAL)#創建一個顯示窗口並命名 39 cv2.imshow('OpenCV_image',image_opencv) 40 cv2.waitKey(0) 41 k=cv2.waitKey(0)#等待鍵入指令 42 if k==27:#wait for ESC key to exit 43 cv2.destroyAllWindows()#銷毀窗口 44 elif k==ord('s'):#鍵入s就保存窗口 45 cv2.imwrite('our happy time.jpg',image_opencv) 46 cv2.destroyAllWindows() 47 """探索OpenCV與plt.show()顯示圖像的區別""" 48 b,g,r=cv2.split(image_opencv)#將圖像的三個通道分開,分別是B,G,R 49 image_merge=cv2.merge([r,g,b])#將三個通道按照R,G,B順序進行融合 50 plt.figure('image') 51 plt.subplot(231);plt.imshow(image_opencv)#顯示使用OpenCV打開的圖像BGR 52 plt.subplot(232);plt.imshow(image_PIL)#顯示使用PIL打開的圖像 53 plt.subplot(233);plt.imshow(b)#分別顯示三個通道的圖像 54 plt.subplot(234);plt.imshow(g) 55 plt.subplot(235);plt.imshow(r) 56 plt.subplot(236);plt.imshow(image_merge)#顯示融合之后的RGB圖像 57 plt.show()
輸出結果:
<class 'PIL.PngImagePlugin.PngImageFile'>
[[[226 137 125]
[226 137 125]
[223 137 133]
...
[230 148 122]
[221 130 110]
[200 99 90]]
[[226 137 125]
[226 137 125]
[223 137 133]
...
[230 148 122]
[221 130 110]
[200 99 90]]
[[226 137 125]
[226 137 125]
[223 137 133]
...
[230 148 122]
[221 130 110]
[200 99 90]]
...
[[ 84 18 60]
[ 84 18 60]
[ 92 27 58]
...
[173 73 84]
[172 68 76]
[177 62 79]]
[[ 82 22 57]
[ 82 22 57]
[ 96 32 62]
...
[179 70 79]
[181 71 81]
[185 74 81]]
[[ 82 22 57]
[ 82 22 57]
[ 96 32 62]
...
[179 70 79]
[181 71 81]
[185 74 81]]]
<class 'numpy.ndarray'>
786432
786432
(512, 512, 3)
(512, 512, 3)

