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

2024-09-03 00:44
文章标签 画图 k230 canmv

本文主要是介绍【CanMV K230】画图,画它个多啦A梦,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  • image对象
    • 构造函数
    • 使用方法
      • 画线段 image.draw_line
      • 画矩形 image.draw_rectangle
      • 画圆 image.draw_circle
      • 绘制椭圆 image.draw_ellipse
      • 画箭头 image.draw_arrow
      • 画十字交叉 image.draw_cross
      • 写字符 image.draw_string
      • 写字符,支持中文 image.draw_string_advanced
    • 绘制哆啦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, sysfrom 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),默认通道0sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0#使用IDE缓冲区输出图像,显示尺寸和sensor配置一致。Display.init(Display.LT9611, to_ide=True)MediaManager.init() #初始化media资源管理器sensor.run() #启动sensorwhile 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 runif isinstance(sensor, Sensor):sensor.stop()# deinit displayDisplay.deinit()os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)time.sleep_ms(100)# release media bufferMediaManager.deinit()

在这里插入图片描述

官方例程

'''
实验名称:画图
实验平台:01Studio CanMV K230
说明:画各种图形和写字符, 通过IDE和LCD显示。
'''import time, os, sysfrom 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,默认通道0sensor.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() #启动sensorclock = 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 runif isinstance(sensor, Sensor):sensor.stop()# deinit displayDisplay.deinit()os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)time.sleep_ms(100)# release media bufferMediaManager.deinit()

在这里插入图片描述

这篇关于【CanMV K230】画图,画它个多啦A梦的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131545

相关文章

Windows11电脑上自带的画图软件修改照片大小(不裁剪尺寸的情况下)

针对一张图片,有时候上传的图片有大小限制,那么在这种情况下如何修改其大小呢,在不裁剪尺寸的情况下 步骤如下: 1.选定一张图片,右击->打开方式->画图,如下: 第二步:打开图片后,我们可以看到图片的大小为82.1kb,点击上面工具栏的“重设大小和倾斜”进行调整,如下: 第三步:修改水平和垂直的数字,此处我修改为分别都修改为50,然后保存,可以看到大小变成63.5kb,如下:

程序员都在使用的画图工具

大家好,我是袁庭新。 程序员都在使用的画图工具,你一定没用过这款画图工具吧!我教程中的架构图都是用它来画的。 比如我编写的RDB工作原理图就是用draw.io绘制的,如下图所示: 再例如Redis集群故障恢复原理图我也是通过draw.io工具绘制的,如下图所示: 是不是觉得draw.io绘制的图形特别简洁、美观。它的官网是: https://www.drawio.com dra

python画图|3D图基础教程

python画3D图和2D流程类似: 【a】定义一个自变量x; 【b】定义两个因变量y和z; 【c】直接输出plot(x,y,z) 今天就一起快乐学习一下画3D图的基础教程。 【1】官网教程 打开官网,可以迅速找到学习教程,参考下述链接: https://matplotlib.org/stable/plot_types/3D/plot3d_simple.html 然后我们解读一下示

python画图|垂线标记系列

进行了一段时间的直方图学习之后,发现python的matplo居然还支持画垂线标记图,赶紧把它记录下来。 直方图绘制教程见下述链接: 【a】直方图绘制基础教程:python画图|直方图绘制教程-CSDN博客 【b】 直方图绘制进阶教程:python画图|直方图绘制教程进阶-CSDN博客 【c】 堆叠直方图绘制教程:python画图|堆叠直方图绘制-CSDN博客 【d】并列直方图绘制教程:

【CanMV K230】圆形检测

【CanMV K230】圆形检测 什么是圆形检测圆形检测应用领域1.工业自动化2.机器人视觉3.医学图像分析4.目标识别5.质量检测6.研究和开发 K230应用相关函数官方例程HDMI屏幕使用圆形检测 本篇内容: 什么是圆形检测圆形检测应用领域K230应用(包含相应函数及例程) B站视频链接:已做成合集 (求去点赞,或者发个弹幕也行呀。C友) 抖音链接:已做成合集(

【python 数据可视化】美丽漂亮的画图神器--pyecharts

今天我们介绍下pyechats 的用法和一个简单的例子。 安装: pip install pyecharts 步骤1:导入相关包: # 导入包import pandas as pdfrom pyecharts.charts import *from pyecharts import options as optsfrom pyecharts.globals import *f

plot()画图,横或纵坐标出现乱序

现象: import matplotlib.pyplot as plt plt.plot(x, y, ‘-’) 画折线图,出现了如下,纵坐标数据密集显示,放大之后,出现了乱序。 解决方法: 1.先查看横纵坐标的数据类型。 print(“type:”, type(y)). 我这里打印是字符串类型。 type: <class ‘str’> 2.横纵坐标数据类型需要是int ,float

python画图|并列直方图绘制

前述学习过程中,已经知晓普通直方图绘制和堆叠直方图绘制,参考链接如下: 西猫雷婶-CSDN博客 有时候,我们还会遇到并列直方图绘制的需求,今天就探索一下。 【1】官网教程 按照惯例,我们先来到官网: https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html#sphx-glr-gallery-lin

【CanMV K230】边缘检测

【CanMV K230】边缘检测 1.啥是边缘检测2.边缘检测应用领域1.特征提取2.图像简化3.结构分析4.提升图像质量5.促进后续处理6.增强系统性能7.降低计算复杂度 3. K230应用相关函数官方例程HDMI屏幕使用边缘检测 本篇内容: 什么是边缘检测边缘检测应用领域K230应用(包含相应函数及例程) B站视频链接:已做成合集 抖音链接:已做成合集 我

【科研绘图】【3D轨线图】:附Origin详细画图流程

目录 No.1 理解3D轨线图 No.2 画图流程 1 导入数据并绘图 2 设置绘图细节 3 设置坐标轴 4 效果图 No.1 理解3D轨线图 3D轨线图,是指在三维坐标系中,通过连续的点或线段连接而成的图形,用于表示一个或多个物体在三维空间中的运动路径。这些路径可以是直线、曲线或者更复杂的轨迹,它们随时间的变化而变化,从而展示物体的动态行为。 No.2 画图