《DNK210使用指南 -CanMV版 V1.0》第三十三章 image元素繪製實驗

正点原子發表於2024-10-26

第三十三章 image元素繪製實驗

1)實驗平臺:正點原子DNK210開發板

2)章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0

3)購買連結:https://detail.tmall.com/item.htm?&id=782801398750

4)全套實驗原始碼+手冊+影片下載地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html

5)正點原子官方B站:https://space.bilibili.com/394620890

6)正點原子K210技術交流企鵝群:605557868

在前面的章節中已經陸續提到了image模組的一些基本使用,從本章開始將透過幾個章節詳細地介紹image模組的使用,本章將講解image模組中的元素繪製。透過本章的學習,讀者將學習到image模組中元素繪製的使用。
本章分為如下幾個小節:
33.1 image模組繪製元素方法介紹
33.2 硬體設計
33.3 程式設計
33.4 執行驗證

33.1 image模組繪製元素方法介紹
image模組是CanMV內建的模組,是一個用於處理影像的強大模組,可以用於影像元素繪製、影像濾波、影像特徵檢測、色塊追蹤、影像對比和碼識別等。由於image模組功能強大,需要介紹的內容也比較多,因此本章僅介紹image模組中元素繪製的相關方法。
image模組為Image物件提供了clear()方法,用於使用顏色值為0的顏色填充整個影像,clear()方法如下所示:

image.clear()

clear()方法用於用顏色值為0的顏色填充整個影像,即用黑色填充整個影像。
clear()方法會返回經過處理的Image物件。
clear()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.clear()

image模組為Image物件提供了draw_line()方法,用於在影像上繪製一條線段,draw_line()方法如下所示:

image.draw_line(x0, y0, x1, y1, color=0xFFFF, thickness=1)

draw_line()方法用於在影像上繪製一條線段,可以指定線段起始和結束的座標以及顏色、粗細等引數。
x0和y0指的是線段的起始X座標和Y座標。
x1和y1指的是線段的結束X座標和Y座標。
color指的是線段的顏色,預設為白色。
thickness指的是線段的粗細畫素,預設為1個畫素。
draw_line()方法會返回經過處理的Image物件。
draw_line()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.draw_line(10, 10, 20, 20, color=(255, 0, 0), thickness=2)

image模組為Image物件提供了draw_rectangle()方法,用於在影像上繪製一個矩形,draw_rectangle()方法如下所示:

image.draw_rectangle(x, y, w, h, color=0xFFFF, thickness=1, fill=False)

draw_rectangle()方法用於在影像上繪製一個矩形,可以指定矩形的左上角座標以及寬度、高度、顏色、矩形框的粗細以及是否對矩形的內部進行顏色填充等引數。
x和y指的是矩形左上角的X座標和Y座標。
w和h指的是矩形的寬度和高度。
color指的是矩形的顏色,預設為白色。
thickness指的是矩形框的粗細畫素,預設為1個畫素。
fill指的是是否對矩形的內部進行顏色填充,若為False,則僅繪製一個矩形框,若為True,則會填充矩形框內部,預設為False。
draw_rectangle()方法會返回經過處理的Image物件。
draw_rectangle()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.draw_rectangle(10, 10, 10, 10, color=(0, 255, 0), thickness=2, fill=True)

image模組為Image物件提供了draw_circle()方法,用於在影像上繪製一個圓形,draw_circle()方法如下所示:
image.draw_circle(x, y, r, color=0xFFFF, thickness=1, fill=False)
draw_circle()方法用於在影像上繪製一個圓形,可以指定圓形的圓心座標以及半徑、顏色、圓形框的粗細以及是否對圓形的內部進行顏色填充等引數。
x和y指的是圓形圓心的X座標和Y座標。
r指的是圓形的半徑。
color指的是圓形的顏色,預設為白色。
thickness指的是圓形框的粗細畫素,預設為1個畫素。
fill指的是是否對圓形的內部進行顏色填充,若為False,則僅繪製一個圓形框,若為True,則會填充圓形框內部,預設為False。
draw_circle()方法會返回經過處理的Image物件。
draw_circle()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.draw_circle(10, 10, 10, color=(0, 0, 255), thickness=2, fill=True)

image模組為Image物件提供了draw_ellipse()方法,用於在影像上繪製一個橢圓形,draw_ellipse()方法如下所示:

image.draw_ellipse(cx, cy, rx, ry, rotation=0, color=0xFFFF, thickness=1, fill=False)

draw_ellipse()方法用於在影像上繪製一個橢圓形,可以指定橢圓形的圓心座標以及X軸和Y軸方向上的半徑、顏色、橢圓形框的粗細以及是否對橢圓形的內部進行顏色填充等引數。
cx和cy指的是橢圓形圓心的X座標和Y座標。
rx和xy指的是橢圓形在X軸以及Y軸方向上的半徑長度。
rotation指的是算轉的角度,單位為度。
color指的是橢圓形的顏色,預設為白色。
thickness指的是橢圓形框的粗細畫素,預設為1個畫素。
fill指的是是否對橢圓形的內部進行顏色填充,若為False,則僅繪製一個橢圓形框,若為True,則會填充橢圓形框內部,預設為False。
draw_ellipse()方法會返回經過處理的Image物件。
draw_ellipse()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.draw_ellipse(10, 10, 10, 5, rotation=30, color=(128, 0, 0), thickness=2, fill=True)

image模組為Image物件提供了draw_string()方法,用於在影像上繪製字串,draw_string()方法如下所示:

image.draw_string(x, y, text, color=0xFFFF, scale=1.0, x_spacing=0, y_spacing=2, mono_space=0)

draw_string()方法用於在影像上繪製字串,可以指定字串的起始座標、內容、顏色、縮放大小、字元間距以及是否使用固定字元寬度等引數。
x和y指的是字串的起始X座標和Y座標。
text指的是字串的內容,支援使用“\r”、“\n”等跳脫字元。
color指的是字串的顏色,預設為白色。
scale指的是字串的縮放大小,預設為1.0。
x_spacing和y_spacing指的是字串中的字元間距和行間距,字元間距預設為0,行間距預設為2。
mono_space指的是是否固定字元寬度,當為1時,字串中的每個字元都佔用想用的字元寬度,當為0時,字串中的每個字元根據其顯示效果調整佔用的寬度,在繪製大文字的時候,看起來會好很多,預設為0。
draw_string()方法會返回經過處理的Image物件。
draw_string()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.draw_string(10, 10, "Hello, DNK210!", color=(0, 128, 0), scale=1.5, x_spacing=1, y_spacing=0, mono_space=1)

image模組為Image物件提供了draw_cross()方法,用於在影像上繪製十字線,draw_cross()方法如下所示:

image.draw_cross(x, y, color=0xFFFF, size=5, thickness=1)

draw_cross()方法用於在影像上繪製十字線,可以指定十字線的座標、顏色、大小和粗細等引數。
x和y指的是十字線中心的X座標和Y座標。
color指的是十字線的顏色,預設為白色。
size指的是十字線的延伸長度。
thickness指的是十字線的粗細畫素,預設為1個畫素。
draw_cross()方法會返回經過處理的Image物件。
draw_cross()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.draw_cross(10, 10, color=(0, 0, 128), size=8, thickness=2)

image模組為Image物件提供了draw_arrow()方法,用於在影像上繪製箭頭,draw_arrow()方法如下所示:

image.arrow(x0, y0, x1, y1, color=0xFFFF, size=10, thickness=1)

draw_arrow()方法用於在影像上繪製箭頭,可以指定箭頭的起始和結束座標、顏色、大小和粗細等引數。
x0和y0指的是箭頭的起始X座標和Y座標。
x1和y1指的是箭頭的結束X座標和Y座標。
color指的是箭頭的顏色,預設為白色。
size指的是箭頭的大小,預設為10。
thickness指的是箭頭的粗細畫素,預設為1個畫素。
draw_arrow()方法會返回經過處理的Image物件。
draw_arrow()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.arrow(10, 10, 20, 20, color=(255, 255, 0), size=8, thickness=2)

image模組為Image物件提供了draw_image()方法,用於在影像上繪製影像,draw_image()方法如下所示:

image.draw_image(image, x, y, x_scale=1.0, y_scale=1.0, alpha=256)

draw_image()方法用於在影像上影像,可以指定影像的繪製區域的起始座標、縮放大小和透明度等引數。
image指的是需要繪製的Image物件。
x和y指的是被繪製影像繪製區域的左上角X座標和Y座標。
x_scale和y_scale指的是繪製影像在X和Y方向上的縮放,預設都為1.0。
alpha指的是繪製影像繪製的透明度,預設為256,即不透明。
draw_image()方法會返回經過處理的Image物件。
draw_image()方法的使用示例如下所示:

import image
img = image.Image(size=(320, 240))
img.draw_image(img, 0, 0 , x_scale=img.width() // 2, y_scale=img.height() // 2, alpha=200)

33.2 硬體設計
33.2.1 例程功能

  1. 獲取攝像頭輸出的影像,並使用image模組在影像上繪製一些元素,後將影像顯示在LCD上。

33.2.2 硬體資源
本章實驗內容,主要講解image模組的使用,無需關注硬體資源。

33.2.3 原理圖
本章實驗內容,主要講解image模組的使用,無需關注原理圖。

33.3 程式設計
33.3.1 image模組繪製元素方法介紹
有關image模組繪製元素方法的介紹,請見第33.1小節《image模組繪製元素方法介紹》。

33.3.2 程式流程圖

圖33.3.2.1image元素繪製實驗流程圖

33.3.3 main.py程式碼
main.py中的指令碼程式碼如下所示:

import lcd
import sensor
lcd.init()
sensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.RGB565)
sensor.set_hmirror(False)
while True:
    img= sensor.snapshot()
    # 繪製線段
    img.draw_line(10, 20, 30, 20, color=(255, 0, 0), thickness=1)
    # 繪製矩形
    img.draw_rectangle(10, 50, 20, 20, color=(0, 255, 0), thickness=2, fill=False)
    # 繪製圓形
    img.draw_circle(20, 100, 10, color=(0, 0, 255), thickness=1, fill=True)
    # 繪製橢圓形
    img.draw_ellipse(20, 140, 20, 10, rotation=45, color=(255, 0, 0), thickness=2, fill=False)
    # 繪製十字線
    img.draw_cross(20, 180, color=(0, 255, 0), size=10, thickness=1)
    # 繪製箭頭
    img.draw_arrow(10, 220, 30, 220, color=(0, 0, 255), thickness=2)
    # 繪製字串
    img.draw_string(60, 0, "     Hello\r\nDNK210", color=(255, 0, 0), scale=4.5)
    # 繪製影像
    img.draw_image(img.copy(), img.width() // 2, img.height() // 2, x_scale=0.5, y_scale=0.5, alpha=200)
    lcd.display(img)

可以看到一開始是先初始化了LCD和攝像頭。
接著在一個迴圈中不斷地獲取攝像頭輸出的影像,因為獲取到的影像就是Image物件,因此可以直接呼叫image模組為Image物件提供的各種方法,然後就是在影像時繪製各種元素,最後在LCD顯示處理好後的影像。
33.4 執行驗證
將DNK210開發板連線CanMV IDE,點選CanMV IDE上的“開始(執行指令碼)”按鈕後,便了看到LCD上顯示了繪製了各種元素的影像,如下圖所示:

圖33.4.1 LCD顯示處理後的影像

相關文章