Robocom比赛中使用opencv-python进行轨道线识别(附带python源码+讲解)

这篇具有很好参考价值的文章主要介绍了Robocom比赛中使用opencv-python进行轨道线识别(附带python源码+讲解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前言:

此代码是本人参加Robocom比赛中完成其中一个要求模块使用的代码。主要功能是根据给定的图片,识别出黑色轨道线的线条在图片中的大致位置。如下图所示:

轨道识别,Robpcom竞赛,python,opencv,算法

比赛要求:编写代码,从200张图片中随机选出20张图像,标出图像中 黑色线条的位置,并在终端中以文字形式输出机器人下一步应该如何调 整姿态(直行,向右前方调整方向,向左前方调整方向)。

2.源码

import cv2
import numpy as np
import random
import os, random, shutil

file_Dir = 'mydata/平安城市测试集/轨道线识别/'   #源图片文件夹路径
tar_Dir = 'mydata/test3/'    #移动到新的文件夹路径

def moveFile(file_Dir):
          

        pathDir = os.listdir(file_Dir)    #取图片的原始路径
        filenumber=len(pathDir)
        rate=0.1    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1
        picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片
        sample = random.sample(pathDir, picknumber)  #随机选取picknumber数量的样本图片
        print (sample)
        for name in sample:
                shutil.copy(file_Dir+name, tar_Dir+name)
        return

if __name__ == '__main__':

    moveFile(file_Dir) #移动选取的文件

    for filename in os.listdir('mydata/test3'): #遍历路径下所有图片
        print(filename)
        image= cv2.imread('mydata/test3'+'/'+filename) 
        image = cv2.resize(image,(600,600)) 

        gs_frame = cv2.GaussianBlur(image, (11, 11), 0) # 高斯滤波获取轮廓
        gray = cv2.cvtColor(gs_frame,cv2.COLOR_BGR2GRAY)   # 原彩色图片转换成灰度图
        ret, binary = cv2.threshold(gray,145,255,cv2.THRESH_BINARY_INV)  # 二值化
        kernel = np.ones((40, 40), dtype=np.uint8) # 膨胀图像
        dilate = cv2.dilate(binary, kernel, 1) # 1:迭代次数,也就是执行几次膨胀操作
        # 进行腐蚀
        kernel = np.ones((20, 20), dtype=np.uint8)
        erosion = cv2.erode(dilate, kernel, iterations=1)
        contours, hierarchy = cv2.findContours(erosion,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#轮廓检测,寻找边框
        area = []
        area_num = []
        for i in range(len(contours)):
            a = cv2.contourArea(contours[i], True)
            area.append(abs(a))
        if len(area) > 1:
            for i in range(len(area)):
                area_num.append(i)
            area_num.remove(area.index(max(area)))
            for i in range(len(area_num)):
                erosion = cv2.drawContours(erosion, contours, area_num[i], 0, cv2.FILLED)
        # 查询角点
        points_hang = []
        points_lie = []
        for i in range(600):
            for j in range(600):
                if erosion[i, j] != 0:
                    points_hang.append(i)
                    points_lie.append(j)
        c1 = min(points_hang)
        c2 = max(points_hang)
        c3 = min(points_lie)
        c4 = max(points_lie)
        if erosion[c1,c3] == 255 and erosion[c2,c3] == 0:
            print('left')
        if erosion[c1,c4] == 255 and erosion[c2,c4] == 0:
            print('right')
        if erosion[c1,c3] == 0 and erosion[c1,c4] == 0:
            print('Go straight')
        # 绘制图框
        cv2.rectangle(image, (c3,c1), (c4,c2), (0,255,0), 2)
        cv2.imshow("result", image)
        cv2.waitKey(0)

3.总结

以上就是我的代码,希望能够帮助大家。有什么问题大家也可以在评论区进行讨论交流。文章来源地址https://www.toymoban.com/news/detail-529774.html

到了这里,关于Robocom比赛中使用opencv-python进行轨道线识别(附带python源码+讲解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv-python使用鼠标点击图片显示该点坐标和像素值&&IPM逆透视变换车道线&&二值化处理

    实现获取像素点的功能主要基于OpenCV的内置函数cv2.setMouseCallback(),即鼠标事件回调 setMouseCallback(winname, onMouse,userdata=0) winname: 接收鼠标事件的窗口名称 onMouse: 处理鼠标事件的回调函数指针 userdata: 传给回调函数的用户数据  代码实现:鼠标点击图片时,读取当前鼠标对应位置

    2024年02月12日
    浏览(54)
  • 解决opencv-python 安装报错 Could not build wheels for opencv-python

    但是发现更新完了之后还是没用,因为主要原因是如果直接安装opencv默认安装最新版,此时找一个python3.6支持的版本就行了,如4.3.0.38,使用如下命令即可成功安装

    2024年02月16日
    浏览(65)
  • Python:安装opencv-python出错问题ERROR: Could not build wheels for opencv-python

    笔者在安装opencv-python的过程中遇到了如下错误 在安装opencv-python的过程,笔者直接通过pip命令进行安装,遇到了如下问题 命令 问题 直接使用上述命令安装的是最新版本,挑一个别的版本的opencv-python即可解决上述问题 使用命令如下 问题解决

    2024年02月11日
    浏览(67)
  • 安装opencv-python

    1.由于之前pip install --upgrade pip出错了,导致Anaconda中Scripts中pip.exe出错 解决方式:python -m ensurepip --default-pip,获得可行的pip.exe 可行的升级pip的方式:python -m pip install --upgrade pip 2.安装opencv-python 尝试从官网安装,官网提示需要更新pip 但是更新出错了,于是有了1问题,pip.exe不

    2024年02月06日
    浏览(53)
  • opencv-python 降噪

    定义 图像噪声是指存在于图像数据中的 不必要的或多余的干扰信息 。噪声的存在严重影响了图像的质量,因此在图像增强处理和分类处理之前,必须予以纠正。 图像中各种妨碍人们对其信息接受的因素即可称为图像噪声 。噪声在理论上可以定义为“不可预测,只能用概率

    2024年02月03日
    浏览(43)
  • opencv-python安装

    OpenCV就是学习计算机视觉的过程中经常用到的工具,opencv降低了计算机视觉的学习门槛。随着机器学习、深度学习等技术的发展,Python庞大的扩展库为Python用户在编程过程中提供了极大的便利,opencv-python便是其中一员。在实际使用opencv-python扩展库的过程中,更多的读者关心

    2024年02月04日
    浏览(91)
  • opencv-python版本问题

    opencv库有两种,一种是 opencv-python ,另一种是 opencv-contrib-python 。前者是基础库,后者则是在前者基础上加了一些contrib module(视觉处理一般用这个)。 安装好OpenCV库,想着先在OpenCV的瀚海里扎两个猛子。没成想,一头扎下去便撞到石头上。 如下图,在键入cv2.imread()时,不仅

    2024年02月13日
    浏览(46)
  • OpenCV-Python(21):OPenCV查找及绘制轮廓

    1.1 目标 理解什么是轮廓 学习掌握找轮廓、绘制轮廓等 学习使用cv2.findContours()、cv2.drawContours()函数的用法 1.2 什么是轮廓         在OpenCV中,轮廓是 图像中连续的边界线的曲线,具有相同的颜色或者灰度,用于表示物体的形状 。轮廓在图像处理和计算机视觉中非常重要

    2024年01月18日
    浏览(46)
  • OpenCv-Python图像特征识别

    本练习学习了OpenCv-Python关于图像特征识别的一些算法,算法理解起来较为困难,但函数用起来上手比较快,主要要明白函数的输入输出的含义。 虽然算法理解不容易,但程序还算有趣,输入是一个完整的图片和一组图片碎片,如下图,然后经过算法计算,把碎片匹配到正确

    2024年02月07日
    浏览(55)
  • opencv-python常用函数汇总

    环境配置地址 Anaconda:https://www.anaconda.com/download/ Python_whl:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 代码如下(示例): cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。 如果是视频文件,直接指定好路径即可。 BORDER_REPLICATE:复制法,也就是复制最边缘像素。

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包