大一时参加2017年全国大学生电子设计竞赛时,当时第一次接触 Python 和 OpenMV,这是当时写下的学习笔记。后来随着硬盘损坏,这份笔记文档也消失了,幸得队友替我收藏了这份笔记。现在把这份笔记放到公众号这里,方便日后查阅,同时也分享给所有有兴趣的人。
该笔记内容对应的原资料为星瞳科技的 OpenMV 上手教程文档(阅读原文)。
import sensor
sensor.set_windowing(roi) # 设置窗口ROI,roi的格式是(x, y, w, h)。
sensor.set_hmirror(True) # 水平方向翻转
sensor.set_vflip(True) # 垂直方向翻转
# 获取一个像素点的值
img = sensor.snapshot()
# 获取坐标为(10, 10)的像素点的颜色值(灰度值/(R, G, B)值)
img.get_pixel(10, 10)
# 设置坐标为(10, 10)的像素点的颜色为红色
img.set_pixel(10, 10, (255, 0, 0))
image.width() # 返回图像的宽度(像素)
image.height() # 返回图像的高度(像素)
image.format() # 灰度图会返回sensor.GRAYSCALE,彩色图会返回sensor.RGB565
image.size() # 返回图像的大小(byte)
image.invert() # 取反,对于二值化的图像,0(黑)变成(白);图像可以是另一个image对象,或者是从(bmp/pgm/ppm)文件读入的image对象,两个图像都必须是相同的尺寸和类型(灰度图/彩色图)。
image.nand(image) # 与另一个图片进行与非运算
image.nor(image) # 与另一个图片进行或非运算
image.xor(image) # 与另一个图片进行异或运算
image.xnor(image) # 与另一个图片进行异或非运算
image.difference(image) # 从这张图片减去另一个图片。比如,对于每个通道的每个像素点,取相减绝对值操作。这个函数,经常用来做移动检测。
import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_auto_whitebal()
ROI = (80, 30 ,15, 15) # 设置统计区域
while(True):
img = sensor.snapshot()
statistics = img.get_statistics(roi = ROI) # 获取统计信息
color_l = statistics.l_mean() # 获取L通道的平均数
color_a = statistics.a_mean() # 获取A通道的平均数
color_b = statistics.b_mean() # 获取B通道的平均数
print(color_l, color_a, color_b)
img.draw_rectangle(ROI)
color_mean = statistics.mean() # 返回灰度的平均数
color_median = statistics.median() # 返回灰度的中位数
color_mode = statistics.mode() # 返回灰度的众数
color_stdev = statistics.stdev() # 返回灰度的标准差
color_min = statistics.min() # 返回灰度的最小值
color_man = statistics.max() # 返回灰度的最大值
color_lq = statistics.lq() # 返回灰度的第一四分数
color_uq = statistics.uq() # 返回灰度的第三四分数
# 画线
# image.draw_line(line_tuple, color = White)
# 在图像中画一条直线
# line_tuple的格式是(x0, y0, x1, y1),指从(x0, y0)到(x1, y1)的直线
# color可以使灰度值(0~255)或彩色值(r, g, b)的tupple,默认为White
# 画框
# image.draw_rectangle(rect_tuple, color = White)
# 在图像中画一个矩形框
# rect_tuple的格式是(x, y, w, h)
# 画圆
# image.draw_circle(x, y, radius, color = White)
# 在图像中画一个圆
# x, y是坐标
# radius是圆的半径
# 画十字
# image.draw_cross(x, y, size = 5, color = White)
# 在图像中画一个十字
# x, y是坐标
# size是两侧的尺寸
# 写字
# image.draw_string(x, y, text, color = White)
# 在图像中写字,每个字占用8×10像素
# x, y是坐标,使用\n, \r, and \r\n会使光标移动到下一行
# text是要写的字符串
# 例子:
import sensor, image, time
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frams(10)
while(True):
img = sensor.snapshot()
img.draw_line((20, 30, 40, 50))
img.draw_line((80, 50, 100, 100), color = (255, 0, 0))
img.draw_rectangle((20, 30, 41, 51), color = (255, 0, 0))
img.draw_circle(50, 50, 30)
img.draw_cross(90, 60, size = 10)
img.draw_string(10, 10, "Hello MicroPython!")