1.前言:

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

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

2.源码

import cv2
import numpy as np
import random
import os, random, shutilfile_Dir = 'mydata/平安城市测试集/轨道线识别/'   #源图片文件夹路径
tar_Dir = 'mydata/test3/'    #移动到新的文件夹路径def moveFile(file_Dir):pathDir = os.listdir(file_Dir)    #取图片的原始路径filenumber=len(pathDir)rate=0.1    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片sample = random.sample(pathDir, picknumber)  #随机选取picknumber数量的样本图片print (sample)for name in sample:shutil.copy(file_Dir+name, tar_Dir+name)returnif __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.总结

以上就是我的代码,希望能够帮助大家。有什么问题大家也可以在评论区进行讨论交流。

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

  1. 火车轨道铁路轨道检测识别(附带Python源码+详细解析)

    现在的网络上,铁轨检测的源码几乎没有,所以自己参照着一篇汽车车道线检测的方法,然后调节参数,实现了铁轨的轨道检测,但现在只能检测直线,弯曲的铁轨检测下一步会实现,实现之后会更新的,敬请期待. 弯轨检测 ...

  2. Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】

    本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向. Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进 ...

  3. AIDL在Telephony中的应用 —— ITelephony 详解 (以Android 9.0源码讲解)

    转载请注明出处:https://blog.csdn.net/turtlejj/article/details/84861020,谢谢- Telephony模块中大量的使用了AIDL,但网上却很少有文章 ...

  4. Opencv基于改进VGG19的表情识别系统(源码&Fer2013&教程)

    1.研究背景 在深度学习中,传统的卷积神经网络对面部表情特征的提取不充分以及计算参数量较大的问题,导致分类准确率偏低.因此,提出了一种基于改进的VGG19网络的人脸表情识别算法.首先,对数据进行增强如 ...

  5. Python基于Opencv的鱼群密度速度检测系统(源码&教程)

    1.研究背景 智慧渔业是大数据.物联网与人工智能等现代信息技术驱动下的渔业发展新模式,是水产养殖业供给侧结构性改革的重要方式,涉及养殖环境监测.生物环境监测与生物状态监测这几大方面的应用与需求.本文从 ...

  6. Python&OpenCV自动人脸打马赛克&调色系统[源码&UI操作界面&部署教程]

    1.视频演示: [项目分享]Python&OpenCV自动人脸打马赛克&调色系统[源码&UI操作界面&部署教程] 2.图片演示: 3.图像颜色检索&替换: 4. ...

  7. 熬夜整理出了70个清华大佬都在用的Python经典练手项目【附源码】

    我们都知道,不管学习那门语言最终都要做出实际的东西来,而对于编程而言,这个实际的东西当然就是项目啦,不用我多说大家都知道学编程语言做项目的重要性. 于是,小编熬了几个通宵,终于整理出了70个清华大佬都 ...

  8. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  9. 手把手教你使用LabVIEW OpenCV DNN实现手写数字识别(含源码)

    文章目录 前言 一.OpenCV DNN模块 1.OpenCV DNN简介 2.LabVIEW中DNN模块函数 二.TensorFlow pb文件的生成和调用 1.TensorFlow2 Keras模 ...

最新文章

  1. IDEA Maven 项目默认编译项目为JDK 1.5
  2. 【django】路由传递参数
  3. hdu 5266(线段树+LCA)
  4. 全网最详细SpringBatch读(Reader)跨多行文件讲解
  5. 多线程编程1 - NSThread
  6. spring-boot 之 使用Admin监控应用
  7. 原理简介_消息通信的利器MQTT协议简介及协议原理
  8. redis核心技术与实战(二)缓存应用篇
  9. Windows 文件含义大全
  10. Springboot环境下mybatis配置多数据源配置
  11. opencv图像分析与处理(13)- 彩色图像处理基础:彩色模型与伪彩色图像处理
  12. 基因家族鉴定分析实战操作手册
  13. 2021年育婴员(五级)考试试卷及育婴员(五级)考试技巧
  14. 天池-小布助手对话短文本语义匹配 复赛rank3、决赛rank4代码及解决方案
  15. 绝密计划:我在阿里打黑工
  16. 设计一个用户注册页面,对用户输入的内容进行有效性验证,如用户名和密码不能为空,两次输入的密码必须相同,邮箱地址必须包含“@”符号等。
  17. 【AVS系列】AVS2参考软件RD17.0
  18. Linux 4.15亮点特性
  19. Layui数据表格分页通过两种方法实现
  20. C# Winform 置顶属性Topmost 的误区

热门文章

  1. android定位到市
  2. 【C语言->数据结构与算法】->哈夫曼压缩解压缩->第一阶段->哈夫曼编码解码的实现
  3. Python:ifwhile
  4. java 处理html字符_java 使用jsoup处理html字符
  5. Java 基础 —— 集合框架概述
  6. ERROR: Rancher must be ran with the --privileged flag when running outside of Kubernetes
  7. 解读opentsdb之aggregator
  8. 达梦数据库数据复制_yxy
  9. 线性回归算法梳理 - 概念,线性回归
  10. 支付宝扫码跳转小程序并传参