# 2022/12/16 上課筆記 影象處理基礎: 像素處理 numpy.array存取像素 ch2 # 2.1.py ## .imshow("視窗名稱",img) 對於視窗名字相同的只會顯示一個,要呈現兩張圖,需不同視窗名稱 ## np.zeros : 產出000 ### >shape 一定要寫(維度型態) ### >dtype=np.uint8 numpy 最常用的型態:uint8,因為灰階值在 0(黑色)~255(白色) 之間 雲端硬碟參考檔案:numpy資料型態.png # 2.2.py ## 黑白照片?灰階照片?彩色照片 ![](https://i.imgur.com/mX2AV6k.png) 黑白又叫做二元影像, 一個二維陣列 裡面只有 0 與 255 兩種數字 ## 灰階 1. 灰階又叫做中性色, 一個二維陣列, 裡面有 0 ~ 255 的整數 0黑~255白 (灰階值) >>> 二維陣列所呈現的是灰階影像 2. 灰階,可以有三個陣列,這三個陣列都一樣。 ![](https://i.imgur.com/hH9Zx0K.png) ## 彩色影像:三張灰階影像套疊 1. 三維陣列所呈現的是彩色影像,電腦可以處理 256x256x256 種顏色 R 0-255 G 0-255 B 0-255 256x256x256=16,777,216 2. 三個大小一致的二維陣列(R, G, B), 拆開各自皆為灰階影像 ## .imread() ### flag 一般常用的 cv2.IMREAD_GRAYSCALE & cv2.IMREAD_COLOR cv2.IMREAD_GRAYSCALE 可寫為 0 ![](https://i.imgur.com/CZNWcg3.png) ![](https://i.imgur.com/4fyBXuA.png) ### 轉換公式 https://pillow.readthedocs.io/en/stable/ ![](https://i.imgur.com/FwBVCHX.png) ### 運算公式 L = R * 299/1000 + G * 587/1000 + B * 114/1000 人眼細胞 公式比例來源:人眼RGB感光細胞(波長)平均比例。 椎狀細胞 RGB 桿狀細胞 只管亮度 ### 數位相機感光元件原理 ![](https://i.imgur.com/uuyV9y6.png) https://blog.xuite.net/suyu9966/wretch/184328800 結果一樣過程不同。因為會重新運算 ![](https://i.imgur.com/xJCOKMO.png) cv2.imread('xxx', 0) 是否與 cv2.imread('xxx') 一樣 cv2.imread('xxx', 0) 會將 RGB 三個二維陣列重新運算成一個二維陣列 ## lena.bmp 這張看起來像灰階的圖像要如何確認是一個2D陣列還是三個3D陣列? 透過 img.shape 來得知 # 2.3.py ## RGB 二維陣列(numpy 切片與索引) https://www.runoob.com/numpy/numpy-indexing-and-slicing.html blue=np.zeros((300,300,3),dtype=np.uint8) ![](https://i.imgur.com/HbSS2b8.png) blue[:,:,0]=255 ![](https://i.imgur.com/alWF3ME.png) # 2.4.py ![](https://i.imgur.com/yoy7yTq.png) # 2.4.1.py ## method (1) .ones 都是1 https://numpy.org/doc/stable/reference/generated/numpy.ones.html (2) .random.randint(low, high=None, size=None, dtype=int) https://numpy.org/doc/stable/reference/random/generated/numpy.random.randint.html?highlight=randint#numpy.random.randint ``` img=np.random.randint(0,256,(40,40,3), dtype=np.uint8) ``` ## [n:m, n:m, 0] 分別代表[列範圍, 行範圍, 色板(band/channel)] #### (m 不會出) ![](https://i.imgur.com/GHya1bn.png) ## reshape img=np.random.randint(0,256,(4,4,3), dtype=np.uint8) #4個4X3 ![](https://i.imgur.com/Vq9wDtI.png) img=np.random.randint(0,256,(3,4,4), dtype=np.uint8) #3個4X4 雲端硬碟參考檔案:np_reshape_stack.png ## Packing & unPacking https://levelup.gitconnected.com/improve-your-python-coding-tuple-packing-and-unpacking-44bd92daab31 # 2.5.py ``` img=np.zeros((2,4,3),dtype=np.uint8) #BAND色板/CHANNEL頻道 2*4大小的影像 #全部0,都是黑色 print(img.shape) print("img=\n",img) print("读取像素点img[0,3]=",img[0,3]) #索引一個格子(0行3列) #結果:[0 0 0] print("读取像素点img[1,2,2]=",img[1,2,2]) ``` ![](https://i.imgur.com/2sShusS.png) ## img[0,3]=[0 0 0] 第0列第3行:[0 0 0]三個數字分別表示:[B=0 G=0 R=0] 也可以使用 ## img[0,3]=255 [255 255 255] ##第0列第3行=255 白色 ![](https://i.imgur.com/j5xgHfK.png) ![](https://i.imgur.com/E8PRpmc.png) ![](https://i.imgur.com/C9JfPPM.png) ``` img[0,3]=255 #第0列第3行=255 白色 img[0,0]=[0,0,255] #第0列第0行 = [B=0,G=06,R(紅)=255] img[1,1,1]=255 #channel=1>>G(綠) 第1行第1列=255 img[1,2,2]=255 #R (紅)第1行第2列=255 img[0,2,0]=255 #B (藍)第0行第2列=255 ``` ![](https://i.imgur.com/GPVavNN.png) cv2.imwrite("test.**jpg**",img) 上下圖顏色不一致,為什麼轉出結果與預期不同? ![](https://i.imgur.com/bbn6Uh3.png) jpg格式經過轉換壓縮????