# 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
## 黑白照片?灰階照片?彩色照片

黑白又叫做二元影像, 一個二維陣列 裡面只有 0 與 255 兩種數字
## 灰階
1. 灰階又叫做中性色, 一個二維陣列, 裡面有 0 ~ 255 的整數
0黑~255白 (灰階值) >>> 二維陣列所呈現的是灰階影像
2. 灰階,可以有三個陣列,這三個陣列都一樣。

## 彩色影像:三張灰階影像套疊
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://pillow.readthedocs.io/en/stable/

### 運算公式 L = R * 299/1000 + G * 587/1000 + B * 114/1000
人眼細胞 公式比例來源:人眼RGB感光細胞(波長)平均比例。
椎狀細胞 RGB
桿狀細胞 只管亮度
### 數位相機感光元件原理

https://blog.xuite.net/suyu9966/wretch/184328800
結果一樣過程不同。因為會重新運算

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)

blue[:,:,0]=255

# 2.4.py

# 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 不會出)

## reshape
img=np.random.randint(0,256,(4,4,3), dtype=np.uint8) #4個4X3

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])
```

## 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 白色
 

```
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
```

cv2.imwrite("test.**jpg**",img)
上下圖顏色不一致,為什麼轉出結果與預期不同?

jpg格式經過轉換壓縮????