精华内容
下载资源
问答
  • openmv巡线,运用算法拟合直线,用于无人机巡线
  • OPENMV巡线代码

    2020-04-05 15:08:12
    巡线代码,首先讲图像进行二值化,然后选取特定的ROI,判断线的左右, 返回01值,然后通过串口发送个主控板
  • openmv巡线小车优化程序进行优化,通过计算线性回归方程的theta和rho来循迹
  • OpenMV巡线模块原理讲解,直线、直角、T形,十字。
  • OpenMV巡线

    千次阅读 2020-05-28 11:42:21
    openMV巡线 借助的是线性回归,线性回归的意思就是找出一条直线嘛,和曲线的吻合度最高,那个曲线就是道路的边缘。

    你向别人介绍openmv就说哦这是一个嵌入式的机器视觉模块。一个摄像头模块带有主控,可以用Python编程。

     

    用openMV巡线

    借助的是线性回归,线性回归的意思就是找出一条直线嘛,用最小二乘法,和曲线的吻合度最高,那个曲线就是道路的边缘。

    先把图像进行二值化。二值化前要设置阈值,比如在这个阈值下面的设置为白色,阈值上面的设置为黑色。

     

     

    openMV好像是专门一个单片机,是不是意味着它要和主控进行通信。

     

     

     

    仔细想想是可以对所有像素值做个线性回归。本身二值化后,像素点要么为0要么为1,就对1的点做线性回归嘛,或者这样,那一个个黑点你就看作坐标系里面的一个点嘛,让你对这些点做线性回归,这样不就会了么。你对白点做线性回归可能是和跟黑点做线性回归的结果是一样的,当然这是我的猜测。

     

    有专门的openMV IDE编写代码,python语言编程。看下面,openMV确实是有专门的主控芯片的。说明它的代码不是跑在飞控上,得和无人机主控进行通信,实时传回数据。

     

    展开全文
  • 用于颜色识别,线段处理,色域处理,可用于巡线
  • #资源达人分享计划#
  • 此为架空线路巡线机器人的文档资料,介绍了机器人的机械结构,以及运动的方式及控制算法
  • 2021电赛F题之openmv巡线(完结)

    千次阅读 多人点赞 2021-11-04 21:17:42
    clock = time.clock() #-----------------------以下是巡线部分----------------------------- uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000) #led = pyb.LED(3) roi1 = [(0, 40, 20, ...

    效果展示:
    出错解决方法
    在这里插入图片描述
    通过使用不同阈值的方法可以得到当前区域中什么区域有红线,对于电控而言作用类似于红外对管,之后电控通过逻辑判断如何运动,这就是我们队伍目前的思想。最后会不会用上还不确定。
    如果对你有帮助就点个赞吧

    import pyb, sensor, image, math, time
    from pyb import UART
    import ustruct
    from image import SEARCH_EX, SEARCH_DS
    #传感器配置
    
    sensor.set_contrast(1)
    sensor.set_gainceiling(16)
    #可以通过设置窗口来减少搜索的图像
    #sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
    #加载模板
    #模板应该是一个小的灰度图像,如32×32.
    
    clock = time.clock()
    #-----------------------以下是巡线部分-----------------------------
    
    uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000)
    
    #led = pyb.LED(3)
    roi1 =     [(0, 40, 20, 40),        #  左  x y w h
                (35, 40, 20, 40),       #  中
                (70,40,10,10),
                (105,40,20,40),
                (140,40,20,40)]         # 右
    #160 120
    sensor.reset() # 初始化摄像头
    sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
    sensor.set_framesize(sensor.QQVGA)#160x120
    sensor.skip_frames(time=2000) # 跳过10帧,使新设置生效
    sensor.set_auto_whitebal(True) # turn this off.
    sensor.set_auto_gain(False) # must be turned off for color tracking
    sensor.set_vflip(False)# 垂直方向翻转
    sensor.set_hmirror(False)# 水平方向翻转
    clock = time.clock()
    
    #low_threshold = (0, 100)  # 105--115
    #GRAYSCALE_THRESHOLD = [(20,100)]
    #思路 现在需要除红线外全是黑色,红线为白
    GROUND_THRESHOLD=(59, 25, 127, 19, -128, 89)
    def sending_data(data):
        global uart;
        data = ustruct.pack("<bbb",      #格式为俩个字符俩个短整型(2字节)
                       0xA5,                      #帧头1
                       0xA6,
                       data
                       )        #数组大小为7,其中2345为有效数据,016为帧头帧尾
        uart.write(data);   #必须要传入一个字节数组
        #print("head",data[0],"status",data[1],"tail",data[2])
        print(data[2])
    getp=0
    #GRAYSCALE_THRESHOLD =(59, 25, 127, 19, -128, 89)
    GROUND_THRESHOLD1=(78, 24, 127, 18, -28, 59)
    #GRAYSCALE_THRESHOLD =(100, 33, 114, 22, 11, 127)#(100, 33, 127, 28, -4, 127)#(100, 30, 127, 17, -37, 127)
    while(True):
        data=0
        blob1=None
        blob2=None
        blob3=None
        blob4=None
        blob5=None
        flag = [0,0,0,0,0]
        img = sensor.snapshot().lens_corr(strength = 1.7 , zoom = 1.0)#畸变矫正
        #img.binary([low_threshold],invert = 1)#设置最低阈值 反转
        #img = sensor.snapshot().binary([GROUND_THRESHOLD])
        
        blob1 = img.find_blobs([GROUND_THRESHOLD1], roi=roi1[0]) #left
        blob2 = img.find_blobs([GROUND_THRESHOLD1], roi=roi1[1]) #middle
        blob3 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[2])
        blob4 = img.find_blobs([GROUND_THRESHOLD1], roi=roi1[3])
        blob5 = img.find_blobs([GROUND_THRESHOLD1], roi=roi1[4])
        if blob1:
            flag[0] = 1  #左边检测到红线
        if blob2:
            flag[1] = 1  #中间检测到红线
        if blob3:
            flag[2] = 1  #右边检测到红线
        if blob4:
            flag[3] = 1  #中间检测到红线
        if blob5:
            flag[4] = 1  #右边检测到红线
        print(flag[0],flag[1],flag[2],flag[3],flag[4])
        for i in (0,1,2,3,4): # 0 1 2 3 4
            data|=(flag[i]<<(4-i))
        sending_data(data)
        for rec in roi1:
            img.draw_rectangle(rec, color=(255,0,0))#绘制出roi区域
    
    展开全文
  • openmv 飞机巡线

    千次阅读 热门讨论 2017-08-07 10:57:01
    2017.8.7.11.03 参考Open*V机器人巡线例程,find_line例程,进行了简单修改。做成了飞机巡线。 希望同各位大佬一起学习一起讨论

    2017.8.7.11.03

    参考Open*V机器人巡线例程,find_line例程,进行了简单修改。做成了飞机巡线。 希望同各位大佬一起学习一起讨论


    展开全文
  • OPENMV的学习(三)巡线

    千次阅读 2021-07-30 19:38:47
    巡线代码如下 while(True): clock.tick() img = sensor.snapshot().binary([THRESHOLD]) if BINARY_VISIBLE else sensor.snapshot() # 返回类似于由find_lines()和find_line_segments()返回的线对象。...

    存储文件

    插入sd卡,会将默认储存地址flash改为sd卡。

    image.save("/example.jpg")
    
    

    串口通信

    传输面积最大的色块的坐标

    # Blob Detection and uart transport
    import sensor, image, time
    from pyb import UART
    import json
    # For color tracking to work really well you should ideally be in a very, very,
    # very, controlled enviroment where the lighting is constant...
    yellow_threshold   = (65, 100, -10, 6, 24, 51)
    # 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) # turn this off.
    clock = time.clock() # Tracks FPS.
    
    uart = UART(3, 115200)
    def find_max(blobs):
        max_size=0
        for blob in blobs:
            if blob.pixels() > max_size:
                max_blob=blob
                max_size = blob.pixels()
        return max_blob
    
    while(True):
        img = sensor.snapshot() # Take a picture and return the image.
    
        blobs = img.find_blobs([yellow_threshold])
        if blobs:
            max_blob=find_max(blobs)
            print('sum :', len(blobs))
            img.draw_rectangle(max_blob.rect())
            img.draw_cross(max_blob.cx(), max_blob.cy())
    
            output_str="[%d,%d]" % (max_blob.cx(),max_blob.cy()) #方式1
            #output_str=json.dumps([max_blob.cx(),max_blob.cy()]) #方式2
            print('you send:',output_str)
            uart.write(output_str+'\r\n')
        else:
            print('not found!')
    
    

    优化图像

    直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法.说得更清楚一些, 以上面的直方图为例, 你可以看到像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围. 见下面左图: 绿圈圈出了 少有像素分布其上的 强度值. 对其应用均衡化后, 得到了中间图所示的直方图. 均衡化的图像见下面右图.

    # Blob Detection and uart transport
    import sensor, image, time
    from pyb import UART
    import json
    # For color tracking to work really well you should ideally be in a very, very,
    # very, controlled enviroment where the lighting is constant...
    yellow_threshold   = (65, 100, -10, 6, 24, 51)
    # 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) # turn this off.
    clock = time.clock() # Tracks FPS.
    
    uart = UART(3, 115200)
    def find_max(blobs):
        max_size=0
        for blob in blobs:
            if blob.pixels() > max_size:
                max_blob=blob
                max_size = blob.pixels()
        return max_blob
    
    while(True):
        img = sensor.snapshot() # Take a picture and return the image.
    
        blobs = img.find_blobs([yellow_threshold])
        if blobs:
            max_blob=find_max(blobs)
            print('sum :', len(blobs))
            img.draw_rectangle(max_blob.rect())
            img.draw_cross(max_blob.cx(), max_blob.cy())
    
            output_str="[%d,%d]" % (max_blob.cx(),max_blob.cy()) #方式1
            #output_str=json.dumps([max_blob.cx(),max_blob.cy()]) #方式2
            print('you send:',output_str)
            uart.write(output_str+'\r\n')
        else:
            print('not found!')
    
    

    image.histeq([adaptive=False[, clip_limit=-1[, mask=None]]])
    在图像上运行直方图均衡算法。 直方图均衡化使图像中的对比度和亮度标准化。
    如果 adaptive 传递为True,那么将在图像上运行自适应直方图均衡方法,这通常比非自适应直方图限定更好,但运行时间更长
    clip_limit 提供了一种限制自适应直方图均衡的对比度的方法。 使用较小的值(例如10)可以生成良好的直方图均衡对比度受限图像。
    mask 是另一个用作绘图操作的像素级掩码的图像。掩码应该是一个只有黑色或白色像素的图像,并且应该与你正在绘制的 image 大小相同。 仅掩码中设置的像素被修改。
    返回图像对象,以便您可以使用 . 表示法调用另一个方法。
    不支持压缩图像和bayer图像。

    线性回归(循迹)

    线性回归能找到视野中任何的线,但是处理速度就会很慢,为了能更快的寻到我们想要的轨迹,把颜色调为灰度,不去处理追踪颜色,图像大小设成QQVGA,缩小图像面积,来增加速度。通过二值化,能让我们想要的线条更加清晰,使用binary()来获取图像信息,用mean(2)来消噪。
    ==image.erode(size[, threshold[, mask=None]])==从分割区域的边缘删除像素。
    这一方法通过卷积图像上((size2)+1)x((size2)+1)像素的核来实现,如果相邻像素集的总和小于 threshold ,则对内核的中心像素进行归零。若 threshold 未设定,这个方法的功能如标准腐蚀方法一样。若threshold设定,您就可以指定腐蚀的特定像素,例如:设置低于2个的像素周围阈值为2。
    mask 是另一个用作绘图操作的像素级掩码的图像。掩码应该是一个只有黑色或白色像素的图像,并且应该与你正在绘制的 image 大小相同。最后通过image.get_regression(阀值)来找线。
    巡线代码如下

    while(True):
        clock.tick()
        img = sensor.snapshot().binary([THRESHOLD]) if BINARY_VISIBLE else sensor.snapshot()
    
        # 返回类似于由find_lines()和find_line_segments()返回的线对象。
        # 你有x1(),y1(),x2(),y2(),length(),
        # theta()(以度为单位的旋转),rho()和magnitude()。
        #
        # magnitude() 表示线性回归的工作情况。这对于鲁棒的线性回归意味着不同
        # 的东西。一般来说,值越大越好...
        line = img.get_regression([(255,255) if BINARY_VISIBLE else THRESHOLD],roi = ROI,robust = True)
        img.mean(2)
        if (line):
            img.draw_line(line.line(), color = 255)#127
            #print(line.theta())
            th = line.theta()
            if th > 90:
                th = 180 - th
                if th > 7:
                    print('L',th)
            else:
                if line.theta() > 7:
                    print('R',line.theta())
                    
    
    展开全文
  • 玩转OpenMv.pdf

    2020-05-01 18:05:07
    文档讲述了OpenMV的基本原理,简单地讲解了OpenMV的使用以及应用,内容相对简单易懂,容易上手,文档的格式看起来也比较方便。
  • 2019年电赛B题OpenMV.zip

    2020-06-16 11:42:52
    2019全国电赛空中巡线,采用openmv视觉,现分享出来,无飞控资料,只是openmv各种巡线源码,可以搭载pix4,匿名,无名,通用,不喜勿喷
  • OpenMV 线性回归巡线之一:赛道提取

    千次阅读 多人点赞 2020-10-16 10:28:27
    巡线设置为“灰度”、“QQQVGA”来加快速度,由于不跟踪颜色,所以不需要闭自动白平衡。 使用 histeq() 方法提高图像的对比度,以便接下来将图像二值化分离出赛道。 下面用 OpenMV IDE 提取赛道的灰度阀值,如下...
  • openmv寻线,把摄像头当成8路光电数字灰度进行寻线,同时可识别十字路线,已配置uart3输出需要的数据
  • 利用OpenMV线性回归寻找黑线 串口通信,给上位机返回拟合线段的端点坐标
  • 本小车能够在亚太机器人大赛场地上精确定位,采用双机通信实现,由于自己录得视频过大,没往上传,仅传了代码
  • 包括MIT、stanford、CMU大学的相关课程资料,包括路径跟踪算法和实现方式等,是小车寻迹、跟车的参考文献,其中的算法比传统的PID算法更加简单有效,只需要修改简单几个参数就可以取得很好的巡线效果
  • 利用Openmv自带的例程进行稍微的改进,我们可以很简单得识别出赛道,如下图: 利用斜线部分分析:因为OpenMV可以返回出斜线的两个顶点的坐标(X1,Y1)、(X2,Y2),于是就可以利用这两个坐标构成反馈,进而利用PID进行...
  • 基于openmv与51小车的串口通信巡线

    千次阅读 多人点赞 2020-10-05 11:32:36
    基于openmv与51小车的串口通信巡线 **新手小菜鸡,写的可能不大行,欢迎大神指正。 硬件连接:我用的是openmv3(注意供电电压端VIN,不然乱接可能会烧坏),P4和P5引脚是RXD和TXD,分别与单片机的TXD,RXD相连接,共...
  • OpenMV4 电路原理图.pdf

    2020-03-09 10:09:32
    OPENMV4的电路原理图,在官方基础上经过优化,替换成国内常见的器件并保证性能前提下降低成本,请放心使用,电路图已经做成成品并且小批量出售给电子爱好者,欢迎有能力工程师复制。
  • 主控:MSP430F5529 软件环境:IDE 库函数版本 主要功能:实现2020年电赛C题爬坡小车的基本功能 备注:里面有430和OpenMV的通信与前面OpenMV线性回归一起食用较好
  • 详细的openmv教程

    2018-08-19 17:54:14
    详细的openmv内部资料教程 ,值得很好参考,介绍一些常用的功能。
  • 二、OpenMV黑线检测2.1 OpenMV简介2.2 OpenMV详细参数2.3 OpenMV IDE安装2.4 OpenMV Cam连接2.5 OpenMV项目搭建2.5.1 OpenMV工程新建2.5.2 OpenMV颜色识别相关函数find_blobs函数阈值颜色阈值选择工具blobs是一个...
  • STM32各类小车工作原理及学习 ...简介:循迹小车由三轮或四轮小车和摄像头两大部分组成,通过...寻迹小车核心组成:openMV和STM3F1。 涉及主要知识:STM32相关知识(学习视频 https://ke.qq.com/course/279403); openM...
  • 凡哥带你玩转OpenMV-OpenMV中文教程

    万次阅读 多人点赞 2017-10-08 20:43:16
    OpenMV简介 By far the easiest way I’ve found to learn and use advanced computer vision. This single board can do everything from driving a car to landing a drone. 目前位置, 这是我目前发现入手...
  • 匿名代码Openmv循迹代码解读

    千次阅读 2019-07-30 17:08:58
    *opmv_ct_sta.en = 1(当光流,openmv,高度标记置位以及AUX2通道值在范围内允许Openmv正常巡线) *opmv.mode_sta(当数据包解析到这个为1的时候是色块追踪,解析到为2的时候为巡线) if(opmv.mode_sta==1) //为色...
  • stm32f4结合openmv简易循迹小车的制作(无PID版)

    千次阅读 多人点赞 2019-10-10 21:23:35
    今年19年,电赛国赛年,暑假在学校准备了一个多月吧,搞四轴飞行器,我负责视觉方面,然后学习了openmv,不幸的是,封箱前几个小时,临阵加电路,没想到电压问题把飞机搞炸了,最终遗憾弃赛,不过还是去了现场,说多...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 187
精华内容 74
关键字:

openmv巡线