首页 > 其他分享 >【CanMV K230】画图,画它个多啦A梦

【CanMV K230】画图,画它个多啦A梦

时间:2024-09-08 21:23:38浏览次数:13  
标签:draw img color K230 画图 thickness image CanMV 255

【CanMV K230】画图,画它个多啦A梦


请添加图片描述

B站视频链接:已做成合集
抖音链接:已做成合集


通过摄像头采集到照片后,我们会进行一些处理,而这时候往往需要一些图形来指示,比如在图片某个位置标记箭头、人脸识别后用矩形框提示等。

本篇重点了解image对象

image对象

构造函数

img=sensor.snapshot()

通过摄像头拍摄方式返回image对象。图像对象是机器视觉操作的基本对象

img=image.Image(path[, copy_to_fb=False])

从 path 中的文件中创建一个新的图像对象。
通过读取图片方式创建image对象。

参数说明
path支持bmp/pgm/ppm/jpg/jpeg格式的图像文件
copy_to_fbcopy_to_fb: 加载大图片。True : 可以加载大图片。False : 不可以加载大图片。

例:img = image.Image(“01Studio.bmp”, copy_to_fb=True)
#表示加载根目录下的01Studio.bmp图片。

img=image.Image(w, h, format)

主动创建一个图像。

参数说明
w图像宽度
h图像高度
format图像格式。部分格式如下:GRAYSCALE : 图像格式;RGB565 : 16bit彩色;(大部分image图像处理函数使用这个格式。)RGB888 : 24bit真彩色

例:img = image.Image(640, 480, image.RGB565) #表示创建一张640x480,
格式为RGB565图像。

使用方法

画线段 image.draw_line

image.draw_line(x0, y0, x1, y1[, color[, thickness=1]])

画线段。

参数说明
x0, y0起始坐标;
x1,y1: 终点坐标;
color颜色;
thickness线条粗细;

例:

#画线段:从 x0, y0 到 x1, y1 坐标的线段,颜色红色,线宽度 2。
img.draw_line(20, 20, 100, 20, color = (255, 0, 0), thickness = 2)

画矩形 image.draw_rectangle

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

画矩形。

参数说明
x, y起始坐标;
w宽度;
h高度;
color颜色;
thickness边框粗细;
fill是否填充;、True : 填充。False : 不填充。

例:

#画矩形:绿色不填充。
img.draw_rectangle(150, 20, 100, 30, color = (0, 255, 0), thickness = 2, fill = False)

画圆 image.draw_circle

image.draw_circle(x, y, radius[, color[, thickness=1[, fill=False]]])

画圆。

参数说明
x, y圆心;
radius宽度;
h高度;
color颜色;
thickness:线条粗细;
fill是否填充;
True填充。
False不填充。

例:

#画圆:蓝色不填充。
img.draw_circle(60, 120, 30, color = (0, 0, 255), thickness = 2, fill = False)

绘制椭圆 image.draw_ellipse

image.draw_ellipse(cx, cy, rx, ry, rotation[, color[, thickness=1[, fill=False]]])
参数说明
cx椭圆中心点的x坐标。
cy椭圆中心点的y坐标。
rx椭圆的半径在x轴方向上的长度。
ry椭圆的半径在y轴方向上的长度。
rotation椭圆的旋转角度,以度为单位。0度表示椭圆的主轴与x轴平行。
color椭圆的边框颜色。这通常是一个表示颜色的元组,如 (R, G, B) 或 (R, G, B, A)。
thickness=1椭圆边框的宽度。如果设置为1,将绘制一个线框椭圆;如果设置为-1,则表示填充椭圆。
fill=False一个布尔值,表示椭圆是否应该被填充。如果为True,椭圆将被填充为指定的颜色。

绘制椭圆

参数说明

画箭头 image.draw_arrow

image.draw_arrow(x0, y0, x1, y1[, color[, size,[thickness=1]]])

画箭头。
例:

参数说明
x0, y0起始坐标;
x1, y1终点坐标;
color颜色;
size箭头位置大小;
thickness线条粗细;
#画箭头:白色。
 img.draw_arrow(150, 120, 250, 120, color = (255, 255, 255), size = 20, thickness = 2)

画十字交叉 image.draw_cross

image.draw_cross(x, y[, color[, size=5[, thickness=1]]])

画十字交叉。

参数说明
x, y交叉中点坐标;
color颜色;
size大小;
thickness线条粗细;
  #画十字交叉。
    img.draw_cross(60, 200, color = (255, 255, 255), size = 20, thickness = 2)

写字符 image.draw_string

image.draw_string(x, y, text[, color[, scale=1[,mono_space=True…]]]])

写字符。

参数说明
x, y起始坐标;
text字符内容;
color颜色;
scale字体大小;
mono_space强制间隔;True : 有间隔。False : 无间隔。
#写字符。
img.draw_string(150, 200, "Hello 01Studio!", color = (255, 255, 255), scale = 4, mono_space = False)

写字符,支持中文 image.draw_string_advanced

image.draw_string_advanced(x, y, char_size,str,[color, font])

写字符,支持中文。

参数说明
x, y起始坐标;
char_size字体大小;
text字符内容;
color颜色;
font字体类型。
#写字符,支持中文。
img.draw_string_advanced(150, 180, 30, "Hello 01Studio", color = (255, 255, 255))
img.draw_string_advanced(40, 300, 30, "人生苦短, 我用Python", color = (255, 255, 255))

熟悉了image对象的画图功能后,我们尝试在摄像头采集到的画面依次画出线段、矩形、圆形、箭头、十字交叉和字符。具体编程思路如下:

绘制哆啦A梦

'''
实验名称:绘制多啦A梦
实验平台:01Studio CanMV K230
说明:使用给的image对象绘制
测试人:咸鱼浆 2024年8月28日21:28:54
'''


import time, os, sys

from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口

try:

    sensor = Sensor() #构建摄像头对象
    sensor.reset() #复位和初始化摄像头
    sensor.set_framesize(Sensor.FHD) #设置帧大小FHD(1920x1080),默认通道0
    sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0

    #使用IDE缓冲区输出图像,显示尺寸和sensor配置一致。
    Display.init(Display.LT9611, to_ide=True)

    MediaManager.init() #初始化media资源管理器

    sensor.run() #启动sensor


    while True:
        os.exitpoint() #检测IDE中断

        img = sensor.snapshot() #拍摄一张图
        # 咸鱼菌绘制多啦A梦,看着玩
        #img.draw_string(40, 8, "xianyujiang", scale = 2.0, color = (0,0,0), thickness = 2)
        # 大圆脸
        img.draw_string_advanced(65, 8, 30, "咸鱼浆", color = (255, 255, 255))
        img.draw_ellipse(120, 120, 80, 74,0, 0, 360, color=(0,0,250),
                                thickness = 2,fill = True)
        img.draw_ellipse(120, 138, 60, 55,0, 0, 360, color=(255,255,255),
                                thickness = 2,fill = True)
        # 眼睛外框
        img.draw_ellipse(100, 90,18, 25,0, 0, 360, color=(255,255,255),
                                thickness = 2)
        img.draw_ellipse(100, 90,17, 24,0, 0, 360, color=(255,255,255),
                                thickness = 2)
        img.draw_ellipse(140, 90,18, 25,0, 0, 360, color=(255,255,250),
                                thickness = 2)
        img.draw_ellipse(140, 90,17, 24,0, 0, 360, color=(255,255,255),
                                thickness = 2)
        # 眼珠
        img.draw_ellipse(110, 92,8, 8,0, 0, 360, color=(0,0,0),
                                thickness = 2)
        img.draw_circle(115, 92, 3, color = (255, 250, 255), thickness = 2)

        img.draw_ellipse(128, 92,8, 8,0, 0, 360, color=(0,0,0),
                                thickness = 2)
        img.draw_circle(125, 92, 3, color = (255, 250, 255), thickness = 2)

        # 鼻子
        img.draw_ellipse(120, 118,8, 9,0, 0, 360, color=(255,0,0),
                                thickness = 2)
        img.draw_circle(125, 118, 3, color = (255, 250, 255), thickness = 2)
        img.draw_line(120, 128, 120, 160, color = (0, 0, 0),
                                thickness = 1)
        # 嘴
        img.draw_line(90, 170, 150, 170, color = (0, 0, 0),
                                thickness = 1)

        # 左胡子
        img.draw_line(50, 110, 100, 130, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(46, 111, 50,110, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(50, 120, 100, 140, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(46, 121, 50,120, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(50, 130, 100, 150, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(46, 131, 50,130, color = (0, 0, 0),
                                thickness = 1)
        # 右胡子
        img.draw_line(140, 130, 190, 110, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(190, 110, 194,111, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(140, 140, 190, 120, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(190, 120, 194,121, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(140, 150, 190, 130, color = (0, 0, 0),
                                thickness = 1)
        img.draw_line(190, 130, 194,131, color = (0, 0, 0),
                                thickness = 1)



        Display.show_image(img) #显示图片




###################
# IDE中断释放资源代码
###################
except KeyboardInterrupt as e:
    print("user stop: ", e)
except BaseException as e:
    print(f"Exception {e}")
finally:
    # sensor stop run
    if isinstance(sensor, Sensor):
        sensor.stop()
    # deinit display
    Display.deinit()
    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)
    # release media buffer
    MediaManager.deinit()


在这里插入图片描述

官方例程

'''
实验名称:画图
实验平台:01Studio CanMV K230
说明:画各种图形和写字符, 通过IDE和LCD显示。
'''

import time, os, sys

from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口

try:

    sensor = Sensor() #构建摄像头对象
    sensor.reset() #复位和初始化摄像头
    sensor.set_framesize(width=800, height=480) #设置帧大小VGA,默认通道0
    sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0

    #Display.init(Display.VIRT, sensor.width(), sensor.height()) #使用IDE缓冲区输出图像
    Display.init(Display.ST7701,to_ide=True) #通过01Studio 3.5寸mipi显示屏显示图像
    MediaManager.init() #初始化media资源管理器

    sensor.run() #启动sensor

    clock = time.clock()

    while True:


        os.exitpoint() #检测IDE中断

        ################
        ## 这里编写代码 ##
        ################
        clock.tick()

        img = sensor.snapshot()
        # 画线段:从 x0, y0 到 x1, y1 坐标的线段,颜色红色,线宽度 2。
        img.draw_line(20, 20, 100, 20, color = (255, 0, 0), thickness = 2)

        #画矩形:绿色不填充。
        img.draw_rectangle(150, 20, 100, 30, color = (0, 255, 0), thickness = 2, fill = False)

        #画圆:蓝色不填充。
        img.draw_circle(60, 120, 30, color = (0, 0, 255), thickness = 2, fill = False)

        #画箭头:白色。
        img.draw_arrow(150, 120, 250, 120, color = (255, 255, 255), size = 20, thickness = 2)

        #画十字交叉。
        img.draw_cross(60, 200, color = (255, 255, 255), size = 20, thickness = 2)

        #写字符。
        #img.draw_string(150, 200, "Hello 01Studio!", color = (255, 255, 255), scale = 4, mono_space = False)

        #写字符,支持中文。
        img.draw_string_advanced(150, 180, 30, "Hello 01Studio", color = (255, 255, 255))
        img.draw_string_advanced(40, 300, 30, "人生苦短, 我用Python", color = (255, 255, 255))

        Display.show_image(img)

        print(clock.fps()) #打印FPS


###################
# IDE中断释放资源代码
###################
except KeyboardInterrupt as e:
    print("user stop: ", e)
except BaseException as e:
    print(f"Exception {e}")
finally:
    # sensor stop run
    if isinstance(sensor, Sensor):
        sensor.stop()
    # deinit display
    Display.deinit()
    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)
    # release media buffer
    MediaManager.deinit()

在这里插入图片描述

标签:draw,img,color,K230,画图,thickness,image,CanMV,255
From: https://blog.csdn.net/weixin_45020839/article/details/141649676

相关文章

  • 【正点原子K210连载】第二十九章 音频录制实验 摘自【正点原子】DNK210使用指南-CanMV
    第二十九章音频录制实验本章将介绍CanMV下的音频录制通过CanMV提供的模块便能快速地实现音频录制。通过本章的学习,读者将学习到CanMV下控制I2S获取音频数和audio模块的使用。本章分为如下几个小节:29.1maix.I2S模块及audio模块介绍29.2硬件设计29.3程序设计29.4运行验证29......
  • 【正点原子K210连载】第三十章 照片拍摄实验 摘自【正点原子】DNK210使用指南-CanMV版
    第三十章照片拍摄实验在前面的章节中,已经了解了如何在CanMV下获取摄像头输出的图像数据并在LCD上进行显示,同时也了解了如何解码文件系统中的图像文件然后在LCD上进行显示,本章将通过照片拍摄实验,介绍如何通过CanMV将摄像头输出的图像数据进行图像编码保存到文件系统中。通过本章的......
  • python画图|垂线标记系列
    进行了一段时间的直方图学习之后,发现python的matplo居然还支持画垂线标记图,赶紧把它记录下来。直方图绘制教程见下述链接:【a】直方图绘制基础教程:python画图|直方图绘制教程-CSDN博客【b】直方图绘制进阶教程:python画图|直方图绘制教程进阶-CSDN博客【c】堆叠直方图绘制......
  • 《DNK210使用指南 -CanMV版 V1.0》第二十二章 六轴传感器——原始数据读取实验
    第二十二章六轴传感器——原始数据读取实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-......
  • 【正点原子K210连载】第二十四章 LCD显示实验 摘自【正点原子】DNK210使用指南-CanMV
    第二十四章LCD显示实验本章将介绍初步介绍CanMV下LCD的使用。通过本章的学习,读者将学习到板载LCD的简单使用。本章分为如下几个小节:24.1lcd模块介绍24.2硬件设计24.3程序设计24.4运行验证24.1lcd模块介绍lcd模块是CanMV内置的模块,lcd模块用于驱动LCD进行一些简单的显示......
  • 【正点原子K210连载】第二十五章 LCD图片显示实验 摘自【正点原子】DNK210使用指南-Ca
    第二十五章LCD图片显示实验本章将介绍在LCD上的图片显示。通过本章的学习,读者将学习到LCD上图片的显示。本章分为如下几个小节:25.1lcd模块介绍25.2硬件设计25.3程序设计25.4运行验证25.1lcd模块介绍有关lcd模块的介绍,请见第24.1小节《lcd模块介绍》。25.2硬件设计25......
  • python plt相关画图
    设置坐标轴粗细ax=plt.gca()ax.spines['bottom'].set_linewidth(2);#设置底部坐标轴的粗细ax.spines['left'].set_linewidth(2);ax.spines['right'].set_linewidth(2);ax.spines['top'].set_linewidth(2);设置图例与坐标轴plt.legend(prop={'si......
  • 《DNK210使用指南 -CanMV版 V1.0》第二十一章 machine.UART类实验
    第二十一章machine.UART类实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html......
  • java-swing画图
    MyRect.javapackageMain;publicclassMyRect{ publicintx=0; publicinty=0; publicMyRgbrgb=newMyRgb(); longcreatetime=0; publicMyRect(){ } publicMyRect(intmx,intmy,MyRgbmyrgb,longtime){ x=mx; y=my; rgb=......
  • 【科研绘图】【相关性热力图】:附Origin详细画图流程
    目录No.1 理解相关性热力图1相关性2相关性热力图No.2画图流程1导入数据并绘图2色阶控制3设置绘图细节4设置坐标轴5效果图No.1 理解相关性热力图1相关性相关性,是统计学中的一个基本概念,用于描述两个或多个变量之间关系的强度和方向。当两个变量之间......