添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
谦虚好学的柚子  ·  JustWeTools/justwetool ...·  20 小时前    · 
心软的钥匙扣  ·  MaixPy3 基本使用示例 - ...·  11 小时前    · 
痴情的键盘  ·  纤维艺术家Mana ...·  1 月前    · 
奔跑的风衣  ·  如何在Ubuntu ...·  1 月前    · 
拉风的黄瓜  ·  Issues to install ...·  2 月前    · 
仗义的铅笔  ·  Archunit: Validate ...·  2 月前    · 
from maix import display, image   
hello_img = image.new(size = (240, 240), 
                              color = (255, 0, 0), mode = "RGB")     #创建一张红色背景图
hello_img.draw_string(30, 115, "hello world!", scale = 1.0, 
                              color = (255, 255, 255), thickness = 1) #在红色背景图上写下hello world
display.show(hello_img)   #把这张图显示出来
img.draw_line(0, 0, 100, 100, color = (127, 127, 127), thickness = 1) #画一条从(0,0)到(100,100)的白色线段 display.show(img) img.draw_rectangle(10, 10, 60, 60, color=(255, 0, 0), thickness=-1) #画一个从(10, 10)到(60, 60)的红色实心矩形 img.draw_rectangle(80, 160, 160, 200, color=(0, 0, 255), thickness=1) #画一个从(80, 160)到(160, 200)的蓝色矩形外框 display.show(img) thickness=1) #画一个中心点在(50,50),半径为20的空心蓝圆 img.draw_circle(150, 150, 20, color=(255, 0, 0), thickness=-1) #画一个中心点在(150,150),半径为20的实心红圆 display.show(img)
from maix import display, image   #引入python模块包
hello_img = image.new(size = (240, 240), color = (0, 0, 0), 
                              mode = "RGB")     #创建一张黑色背景图
hello_img.draw_string(30, 115, "hello world!", scale = 1.0, color = (255, 255, 255), 
                              thickness = 1) #在黑色背景图上写下hello world
display.show(hello_img)   #把这张图显示出来
img = image.new(color=(255, 255, 255)) image.load_freetype("/home/res/sans.ttf") s = "二进制例程" x, y = image.get_string_size(s, 3) img.draw_string(0, 120 - (y + 5), s, 3, (255, 0, 0)) # show left-button s = "可执行文件示例" x, y = image.get_string_size(s, 2) img.draw_string(240 - x, 0, s, 2, (0, 255, 0)) # show right-up # wait fix image.free_freetype() s = "bin example" x, y = image.get_string_size(s, 1) img.draw_string(0, 240 - (y + 5), s, 1, (0, 0, 255)) # show left-button display.show(img)
from maix import image, display
img = image.new(size = (240, 240), color = (0, 0, 0), 
                        mode = "RGB")     #创建一张黑色背景图
img.draw_ellipse(120, 40, 20, 50, 90, 0, 360, color=(0,255,0), 
                        thickness = 1)
display.show(img)
img = image.new(color=(255, 0, 0)) img.draw_string(100, 100, "hello", 2, color=(0, 0, 255)) mk = img.crop(90, 90, 100, 50) # 截一张图出来, x, y, w, h imga = image.new(color=(0, 255, 0)) imga.draw_image(mk, 10, 10) # imga.draw_image(imga) # py no-allow use self but libmaix support imga.draw_image(mk, 100, 100, alpha=0.5) display.show(imga)
  • resize(w, h, func) # width, height, cv::INTER_LINEAR

  • flip(code) # -1 horizontal & vertical, 1 horizontal, 0 vertical

  • rotate(angle, adjust) # [-360, +360], adjust uasge

    imga.draw_image(mk.rotate(-90), 70, 10) # 顺时针 90 旋转 imga.draw_image(mk.flip(1), 130, 10) # 水平翻转 horizontal imga.draw_image(mk.resize(80, 50), 10, 80) # 缩放到 (80, 50) imga.draw_image(mk.flip(0), 100, 80) # 垂直翻转 vertical imga.draw_image(mk.rotate(-135, adjust=0), 10, 150) # 顺时针 135 旋转 imga.draw_image(mk.rotate(+45, adjust=1), 100, 150) # 逆时针 45 旋转 display.show(imga)
    from maix import image, display
    img = image.new(size=(240, 240), mode="RGB", color=(255, 255, 255))
    img.draw_line(0, 0, 240, 240)
    img.draw_rectangle(40, 120, 160, 200, color=(255, 0, 0), thickness=16) #
    img.draw_circle(120, 120, 20, color=(0, 255, 0))
    img.draw_string(40, 40, "dalaoshu", 2, color=(0, 0, 255))
    import cv2
    import numpy as np
    cv_img = cv2.imdecode(np.frombuffer(img.tobytes('jpg'), np.uint8), cv2.IMREAD_COLOR)
    cv_img = cv_img[ : , : , (2,1,0)]
    tmp = image.load(cv_img.tobytes(), cv_img.shape)
    tmp.save('tmp.jpg')
    img_encode = cv2.imencode('.jpg', cv_img)[1]
    tmp = image.open(img_encode.tobytes())
    tmp.save('tmp.jpg')
    from maix import image, display
    img = image.new(size=(240, 240), mode="RGB", color=(255, 255, 255))
    img.draw_line(0, 0, 240, 240)
    img.draw_rectangle(40, 120, 160, 200, color=(255, 0, 0), thickness=16) #
    img.draw_circle(120, 120, 20, color=(0, 255, 0))
    img.draw_string(40, 40, "dalaoshu", 2, color=(0, 0, 255))
    # 保存图片到 test.png 中
    img.save("test.png")
    # 读取 test.png 中的图片
    tmp = image.open("test.png")
    # 0.5.0 以后支持导出 jpg 、 bmp 、 png 、 默认 rgb 等格式的图像数据到 bytes 变量中,方便向外传输图像数据。
    img_bytes = tmp.resize(size=(160, 120)).tobytes('jpg')
    # >>> img_bytes = img.tobytes('jpg')
    # >>> img_bytes[:2]
    # b'\xff\xd8'
    # >>> img_bytes[-2:]
    # b'\xff\xd9'
    # >>> img_bytes = img.tobytes('bmp')
    # >>> img_bytes[:2]
    # b'BM'
    # >>> img_bytes = img.tobytes('rgb')
    # >>> img_bytes[:2]
    # b'\x00\x00'
    # >>> img_bytes = img.tobytes('png')
    # >>> img_bytes[:2]
    # b'\x89P'
    # 0.5.2 以后 image.open 支持直接打开上述格式导出的 bytes 编码数据。
    tmp = image.open(img_bytes)
    print('tmp.png', tmp)
    tmp.save("tmp.png")
    display.show(tmp)

    【传统视觉基础】寻找色块(颜色识别)

    该功能需要更新到 0.5.1 版本以后,填色的顺序为 [(L 最小值, L 最大值, A 最小值, A 最大值, B 最小值, B 最大值)]。

    使用 find_blobs 的查找色块算法,查找图像中符合 LAB 颜色阈值的色块,可以在列表中放入多个阈值区间进行匹配,通过阈值编辑工具可将目标颜色变成白色意为提取,其他颜色全变为黑色表示忽略。

    blue = 13, 54, 11, 48, -91, -28 为什么是 蓝色 的 lab 阈值,这是因为使用 LAB 阈值工具可以获得两个期望颜色区间的最大和最小的 L A B 值,所以上图对应的下图示意图的顺序。

    现已支持在线图传调试 LAB 阈值 wiki.sipeed.com/threshold ,动态调试效果请看 Github 实现

    Lab颜色空间中的L分量用于表示像素的亮度,取值范围是 [0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是 [127,-128];b表示从黄色到蓝色的范围,取值范围是 [127,-128]。

    from maix import image, display, camera
    blue = [(34, 100, -38, 3, -128, -28)]  # 0.5.0 以后蓝色的 lab 阈值,0.4.9 之前为 [(13, 11, -91, 54, 48, -28)]
    while True:
        img = camera.capture()
        blobs = img.find_blobs(blue, merge=True)    #在图片中查找lab阈值内的颜色色块 merge 合并小框。
        if blobs:
            for i in blobs:
                img.draw_rectangle(i["x"], i["y"], i["x"] + i["w"], i["y"] + i["h"], 
                                   color=(0, 0, 255), thickness=1) #将找到的颜色区域画出来
        display.show(img)

    【传统视觉基础】阈值处理

    该功能需要更新到 0.5.3 版本以后

    基于上述获得的 LAB 阈值,可以直接应用到图像上(俗称二值化),便于后续的寻线寻迹预处理,可以解决红、黄、蓝、绿线等各种场合。

    这里演示的是蓝色跑道白色数值的场合,当然具体情况具体分析吧!

    不想 pip install -U maixpy3 联网下载的可以到 pypi 下载 armv7l 的 whl 包放到板子里使用 pip install maixpy3*.whl -U 安装

    from maix import image, display, camera THRESHOLD = [(34, 100, -38, 3, -128, -28)] while True: img = camera.capture().binary(THRESHOLD, invert=False, zero=False) # invert 取反阈值,zero 是否不填充阈值区域。 display.show(img) while True: img = camera.capture() tmp = img.find_lines((0, 0, 240, 240), 2, 1, 1100, 50, 50) for l in tmp: img.draw_line(l[0], l[1], l[2], l[3], color = (0, 255, 0)) display.show(img)

    【传统视觉基础】寻线寻迹

    找线算法是面对小车寻线而开发的一个算法。主要的流程是,灰度化 -> 自适应阈值处理 -> 形态学运算 -> 图像最小二乘法。完成算法流程后返回一条线的信息,让小车能够根据识别出来线的信息进行运动。这个接口比较适合做图像寻线。

    对应实现 点我跳转到 github

    img = camera.capture() line = img.find_line() img.draw_line(line["rect"][0], line["rect"][1], line["rect"][2], line["rect"][3], color=(255, 255, 255), thickness=1) img.draw_line(line["rect"][2], line["rect"][3], line["rect"][4], line["rect"][5], color=(255, 255, 255), thickness=1) img.draw_line(line["rect"][4], line["rect"][5], line["rect"][6], line["rect"][7], color=(255, 255, 255), thickness=1) img.draw_line(line["rect"][6], line["rect"][7], line["rect"][0], line["rect"][1], color=(255, 255, 255), thickness=1) img.draw_circle(line["cx"], line["cy"], 4, color=(255, 255, 255), thickness=1) display.show(img) img = camera.capture() colors = img.get_blob_color((100, 100, 10, 10), 0, 0) img.draw_rectangle(100, 100, 110, 110, color=(255, 0, 0), thickness=1) #将找到的颜色区域画出来 img.draw_rectangle(9, 9, 21, 21, color=(255, 255, 255), thickness=1) #将找到的颜色区域画出来 img.draw_rectangle(10, 10, 20, 20, color=(int(colors[0]), int(colors[1]), int(colors[2])), thickness=-1) #将找到的颜色区域画出来 display.show(img)
  •