zoukankan      html  css  js  c++  java
  • openmv4测距和测量物体大小

    本次测量的物体为:一个绿色小瓶盖

    首先得通过阈值编译器得到这个绿色小瓶盖得阈值:

    代码如下:

    import sensor, image, time              #导入模块
    
    
    # For color tracking to work really well you should ideally be in a very, very,
    # very, controlled enviroment where the lighting is constant...
    red_threshold   = (100, 0, 127, 13, -104, 85)    #红色阈值
    green_threshold   = (93, 18, -122, -13, 16, 127)    #黄色阈值
    blue_threshold   = (0,15,0,40,-80,-20)      #蓝色阈值
    
    
    # You may need to tweak the above settings for tracking green things...
    # Select an area in the Framebuffer to copy the color settings.
    
    
    sensor.reset() # Initialize the camera sensor.
    sensor.set_pixformat(sensor.RGB565) # use RGB565.
    sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
    sensor.skip_frames(10) # Let new settings take affect.
    sensor.set_auto_whitebal(False) # 关闭白平衡,以防颜色干扰
    clock = time.clock() # Tracks FPS.
    
    
    #注意:每次更换物体,需要重新测量K1、K2、K3
    
    
    K1=540              #需要自己计算,K1=距离(12cm已知)*直径像素Lm(45)
    K2=3/46              #需要自己计算,K2=实际大小(宽3cm已知)/宽像素b[2](46)
    K3=3/42             #需要自己计算,K3=实际大小(高3cm已知)/高像素b[3](42)
    
    
    
    
    while(True):
        clock.tick() # Track elapsed milliseconds between snapshots().
        img = sensor.snapshot() # Take a picture and return the image.
    
    
        blobs = img.find_blobs([green_threshold])
        if len(blobs) == 1:
            # Draw a rect around the blob.
            b = blobs[0]
            img.draw_rectangle(b[0:4]) # rect,矩形框
            img.draw_cross(b[5], b[6]) # cx, cy,物体坐标,画十字
            Lm = (b[2]+b[3])/2         #b[2]为宽,b[3]为长,计算得到Lm——直径像素
            print("直径像素是:",Lm)                 #输出直径像素,来计算K1
            print("宽像素是:",b[2])                #输出宽度的像素,来计算K2
            print("高像素是:",b[3])                #输出长度的像素,来计算K3
            distance = K1/Lm                      #求距离的公式
            width = K2*b[2]
            height = K3*b[3]
            print("距离是:",distance)                 #测距
            print("宽是:%f,长是:%f"%(width,height))   #测量物体大小
    
    

     

    测量结果如下:

    该测量值与实际值有一定的误差,但是误差不大!

     注意:每次更换物体,需要重新测量K1、K2、K3

    正是步行者,一步步登峰!

  • 相关阅读:
    Redhat 8 nfs网络共享
    Cisco ASA NAT (1) 静态配置和端口映射
    DISM命令行工具修复Windows 10映像
    開啟windows 7 ,10 的熱點功能(無線熱點)
    symantec SMG 抓包
    在 MacBook 上安装 Ubuntu
    springboot整合的MongoDB(一){博主新人入坑,不对的地方还望大哥指出}
    feign接口无法传递参数 (初学者)
    low cache rba恢复到on disk rba
    控制文件被删除的测试
  • 原文地址:https://www.cnblogs.com/ouyangmail/p/14241626.html
Copyright © 2011-2022 走看看