# 圖形處理

## 螢幕

```python
from cocopiPython import Screen
```

### 初始化
```python
Screen()
```

### 創建畫布

```python
create(w=320,h=240,bgColor=(0,0,0))
```
會返回一個 Image 物件，後續的繪製顯示操作都是Image物件的操作

### 參數說明
| 參數 |值 |描述 |
| --- | --- | --- |
| w | 數字 | 畫布寬度，選填，默認為320 |
| h | 數位 | 畫布的高度，選填，默認為240 |
| bgColor | (r,g,b) | 顏色，選填，默認為(0,0,0) |

### 樣例

```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(255,255,255)) # 創建畫布
while True:
    canvas.show(ver) # 顯示畫布
```

### 畫布顯示

```python
from cocopiPython import Screen

canvas=Screen()

canvas.show(img,canvas_x=0,canvas_y=0)
```

### 參數說明
| 參數 |值 |描述 |
| --- | --- | --- |
| img | 圖片 | 畫布物件，必填|
| canvas_x | 數位 |畫布起始點x軸坐標，選填，默認為0 |
| canvas_y | 數位 |畫布起始點y軸坐標，選填，默認為0 |


### 清除畫布

```python
Image.clear()
```
清除image.Image 物件內部的圖像資料，但不刪除物件。

### 繪製文字
在創建的畫布上面顯示文字，Image為圖像物件

```python
Image.draw_string(x,y,text,scale,color,thickness)
```
### 參數說明

| 參數 |值 |描述 |
| --- | --- | --- |
| x | 數值 | 起始點x軸坐標，必填 |
| y | 數值 | 起始點y軸坐標，必填 |
| text | 字串 | 要顯示的文本內容，必填 |
| scale | 大於0的整數或浮點值 | 字體大小，必填 |
| color | (r,g,b) | 字體顏色，必填 |
| thickness | 大於0的整數 | 字體粗細，必填 |

### 樣例
```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布

while True:
    ver.draw_string(150,100, "你好", scale = 1, color = (255,255,255) , thickness = 1)
    ver.draw_string(120,120, "Hello World!", scale = 1, color = (255,255,255) , thickness = 1)
    canvas.show(ver) # 顯示畫布
```

### 繪製矩形
在創建的畫布上面繪製矩形，矩形分實心矩形和空心矩形
```python
Image.draw_rectangle(x1,y1,x2,y2,color=(r,g,b),thickness=1)
```

### 參數說明
| 參數 |值 |描述 |
| --- | --- | --- |
| x1 | 數位 | 起點x軸坐標，必填 |
| y1 | 數位 | 起點y軸坐標，必填 |
| x2 | 數位 | 終點x軸坐標，必填 |
| y2 | 數位 | 終點y軸坐標，必填 |
| color | (r,g,b) | 矩形顏色，必填 |
| thickness | 整數 | 邊框線的粗細，空心矩形為正，實心矩形為負，必填 |

### 樣例
```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布

while True:
    ver.draw_rectangle(40,40, 280,200, (255,0,0),1) # 繪製空心矩形
    ver.draw_rectangle(70,70, 250,170, color=(255,255,0),thickness=-1) # 繪製實心矩形
    canvas.show(ver) # 顯示畫布
```

### 繪製直線
在圖像上繪製一條直線。 
```python
Image.draw_line(x1,y1,x2,y2,color=(r,g,b),thickness=1)
```
### 參數說明
| 參數 |值 |描述 |
| --- | --- | --- |
| x1 | 數位 | 起點x軸坐標，必填 |
| y1 | 數位 | 起點y軸坐標，必填 |
| x2 | 數位 | 終點x軸坐標，必填 |
| y2 | 數位 | 終點y軸坐標，必填 |
| color | tuple | 顏色，必填 |
| thickness | 整數 | 粗細，必填 |

### 樣例
在螢幕上繪製一條從(x1，y1)到(x2, y2)的直線
```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布

while True:
    ver.draw_line(40,40, 280,200, (255,0,0),2) 
    ver.draw_line(280,40, 40,200, color=(255,255,0),thickness=2) 
    canvas.show(ver) # 顯示畫布
```

### 绘制圆
在創建的畫布上面繪製圓形，圓形分實心和空心
```python
Image.draw_circle(x, y, radius, color = (r, g, b), thickness = 1)
```
### 參數說明
| 參數 |值 |描述 |
| --- | --- | --- |
| x | 數位 | 起始点x轴坐标，必填 |
| y | 數位 | 起始点y轴坐标，必填 |
| radius | 數位 | 半径，必填 |
| color | tuple | 字体颜色，必填 |
| thickness | 1~3 | 線的粗細，必填 |

### 樣例
```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布

while True:
    ver.draw_circle(160,120, 100, color=(255, 0, 0), thickness=1)
    ver.draw_circle(160,120, 50, color=(255, 255, 0), thickness=-1)
    canvas.show(ver) # 顯示畫布
```

### 尺寸調整
```python
Image.resize(w, h, padding = 0)
```

### 參數說明
將圖像調整至(w, h)大小，padding 默認會按比例縮放填充，而不是 CV 的拉伸圖像變形。 

| 參數 |值 |描述 |
| --- | --- | --- |
| W | 數位 | 新圖像的寬度 |
| H | 數位 | 新圖像的寬度 |
| padding | 數位 | 縮放比例 |

### 樣例

```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布

canvas.show(ver)
time.sleep(3)
ver = ver.resize(220, 220, padding = 0)
while True:
    canvas.show(ver)
```

### 圖片裁剪
裁剪圖片返回一張全新的圖片，返回Image 對象
```python
Image.crop(x, y, w, h)
```

### 參數說明
| 參數 |值 |描述 |
| --- | --- | --- |
| x | 數位 | 裁剪的起點的x軸坐標 |
| y | 數位 | 裁剪的起點的y軸坐標 |
| w | 數位 | 裁剪的寬度 |
| h | 數位 | 裁剪的高度 |

### 樣例
```python
from cocopiPython import Screen

canvas=Screen() # 屏幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 创建画布
canvas.show(ver)
time.sleep(3)
ver = ver.crop(0,0,200,200)
while True:
    canvas.show(ver)
```

### 圖片旋轉
旋轉圖像到固定的角度，保持圖像的尺寸不變，返回 Image 物件，rotate為旋轉角度，正數時表示逆時針旋轉，負數時表示順時針旋轉
```python
Image.rotate(rotate = 1)
```

### 樣例
```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布

canvas.show(ver)
time.sleep(3)
ver = ver.rotate(-50)
while True:
    canvas.show(ver)
```

### 圖片翻轉
沿著 x 或 y 軸進行翻轉圖像，保持圖像的尺寸不變，flip為1則水準翻轉，flip為0則垂直翻轉，返回一個Image物件
```python
Image.flip(flip = 1)
```

### 樣例
```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布

while True:
    ver.clear()
    ver.draw_rectangle(80,80, 150,150, color=(255,0,0), thickness=1)
    ver.draw_string(100,100, "hello", scale = 1, color = (255,0,0) , thickness = 1)
    canvas.show(ver)
    time.sleep(3)
    ver = ver.flip(0) # 垂直
    canvas.show(ver)
    time.sleep(3)
    ver = ver.flip(1) # 水準
    canvas.show(ver)
    time.sleep(3)
```

### 圖片保存
將Image 對象保存成二進位檔案到本地
```python
Image.save("./tmp.jpg")
```

### 樣例
```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布

while True:
    ver.draw_string(150,100, "你好", scale = 1, color = (255,255,255) , thickness = 1)
    ver.draw_string(120,120, "Hello World!", scale = 1, color = (255,255,255) , thickness = 1)
    ver.save('/root/user/img/test.jpg')
    time.sleep(1)
    canvas.show(ver) # 顯示畫布
```

### 繪製圖片
將傳遞的img圖像畫在image.Image() 物件內部的圖像上， img只能傳遞image.Image()物件的圖像。會返回 Image 對象
```python
Image.draw_image(img,0,0)
```

### 參數說明
| 參數 |值 |描述 |
| --- | --- | --- |
| img | 圖片 | 打開的Image物件 |
| x | 數位 | 起始點x軸坐標 |
| y | 數位 | 起始點y軸坐標 |

### 樣例
```python
from cocopiPython import Screen

canvas=Screen() # 螢幕初始化
ver = canvas.create(bgColor=(20,20,100)) # 創建畫布
while True:
    ver.draw_image((image.open("/root/user/img/test.jpg")),0,0) # 繪製圖像
    canvas.show(ver)
```

## 攝像頭
```python
from cocopiPython import cameraPython
```

### 初始化
```python
cameraPython()
```

### 獲取攝像頭圖像
```python
capture()
```
同樣會返回一個 Image 物件，可以進行繪製操作。

### 樣例
```python
from cocopiPython import cameraPython,Screen,WebPageTransmission

camera = cameraPython() # 攝像頭初始化
canvas = Screen() # 畫布初始化

while True:
    img = camera.capture() # 獲取攝像頭圖像
    img.draw_string(120,120, "Hello World!", scale = 1, color = (255,255,255) , thickness = 1)
    canvas.show(img) # 畫布顯示圖像
```

## 圖傳
```python
from cocopiPython import ImageTransmission
```

### 初始化
```python
ImageTransmission()
```

### 顯示
```python
show(image)
```

### 參數說明
| 參數 | 值 | 描述 |
| --- | --- | --- |
| image | 圖片 | 打開的Image物件 |

### 樣例
```python
from cocopiPython import cameraPython,Screen,ImageTransmission

camera = cameraPython() # 攝像頭初始化
canvas = Screen()
imageTransmission = ImageTransmission() # 畫布圖像傳輸

while True:
    img = camera.capture() # 獲取攝像頭圖像
    imageTransmission.show(img) # 圖傳至電腦
    canvas.show(img) #螢幕顯示
```

## 循線
```python
import cocopiPython

cocopiPython.lane_tracking(img,region1,region2)
```

### 參數說明
|參數|值|描述|
|:---|:---|:---|
|img|圖片|打開的Image物件，必填|
|region1|元組，(x,y,w,h)|左側檢測框的位置與大小，必填|
|region2|元組，(x,y,w,h)|右側檢測框的位置與大小，必填|

### 樣例
```python
import cocopiPython
from cocopiPython import cameraPython,Screen

camera = cameraPython() # 相機初始化
screen = Screen() # 螢幕初始化

while True:
    img = camera.capture()   # 獲取攝像頭圖像
    cocopiPython.lane_tracking(img,(10, 190,140, 20),(160, 190,140, 20))
    screen.show(img) # 畫布顯示圖像
```




