# 圖形處理 ## 螢幕 ```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) # 畫布顯示圖像 ```