# 图形处理

## 屏幕

```python
from cocopiPython import Screen
```

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

### 创建画布

```python
create(w=320,h=240,bgColor=(0,0,0))
```
会返回一个 Image 对象，后续的绘制显示操作都是Image对象的操作

### 参数说明
| 参数 |类型 |说明 |
| --- | --- | --- |
| w | int | 画布宽度，选填，默认为320 |
| h | int | 画布高度，选填，默认为240 |
| bgColor | tuple | 画布背景颜色，选填，默认为(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 | object | 画布对象，必填 |
| canvas_x | int | 画布起始点x轴坐标，选填，默认为0 |
| canvas_y | int | 画布起始点y轴坐标，选填，默认为0 |


### 清除画布

```python
Image.clear()
```
清除image.Image 对象内部的图像数据，但不删除对象。

### 绘制文字
在创建的画布上面显示文字，Image为图像对象

```python
Image.draw_string(x,y,text,scale,color,thickness)
```
### 参数说明

| 参数 |类型 |说明 |
| --- | --- | --- |
| x | int | 起始点x轴坐标，必填 |
| y | int | 起始点y轴坐标，必填 |
| text | string | 要显示的文本内容，必填 |
| scale | float | 文字大小，选填，默认为1 |
| color | tuple | 字体颜色，必填 |
| thickness | int | 文字粗细，选填，默认为1 |

### 样例
```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 | int | 起始点x轴坐标，必填 |
| y1 | int | 起始点y轴坐标，必填 |
| x2 | int | 终点x轴坐标，必填 |
| y2 | int | 终点y轴坐标，必填 |
| color | tuple | 字体颜色，必填 |
| thickness | int | 边框线的粗细，空心矩形为正，实心矩形为负，必填 |

### 样例
```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 | int | 起始点x轴坐标，必填 |
| y1 | int | 起始点y轴坐标，必填 |
| x2 | int | 终点x轴坐标，必填 |
| y2 | int | 终点y轴坐标，必填 |
| color | tuple | 字体颜色，必填 |
| thickness | int | 粗细，必填 |

### 样例
在屏幕上绘制一条从(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 | int | 起始点x轴坐标，必填 |
| y | int | 起始点y轴坐标，必填 |
| radius | int | 半径，必填 |
| color | tuple | 字体颜色，必填 |
| thickness | int | 线的粗细，必填 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 | int | 新图像的宽度 |
| H | int | 新图像的宽度 |
| padding | int | 缩放比例 |

### 样例

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

### 图片裁剪
别名为 cut 函数接口。 裁剪图片返回一张全新的图片 x, y, w, h裁剪图像的位置和大小 返回
Image 对象
```python
Image.crop(x, y, w, h)
```

### 参数说明
| 参数 |类型 |说明 |
| --- | --- | --- |
| x | int | 裁剪的起点的x轴坐标 |
| y | int | 裁剪的起点的y轴坐标 |
| w | int | 裁剪的宽度 |
| h | int | 裁剪的高度 |

### 样例
```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.Image() | 打开的Image对象 |
| x | int | 起始点x轴坐标 |
| y | int | 起始点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.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.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) # 畫布顯示圖像
```




