import cv2 as cv
import numpy as np
import timedef xunji():cap = cv.VideoCapture(0, cv.CAP_DSHOW)cap.set(3, 600)cap.set(4, 600)if cap.isOpened():while 1:ret, frame = cap.read()res = cv.resize(frame, None, fx=0.5, fy=0.5)cv.imshow("res", res)#   颜色空间转换res1 = cv.cvtColor(res, cv.COLOR_BGR2GRAY)res2 = cv.cvtColor(res, cv.COLOR_BGR2HSV)#   图像阈值设置ret0, thresh1 = cv.threshold(res1, 80, 255, cv.THRESH_BINARY)#   高斯滤波blur = cv.medianBlur(thresh1, 5)#   形态学运算kernel = np.ones((5, 5), np.uint8)cvOpen = cv.morphologyEx(blur, cv.MORPH_OPEN, kernel)  # 开运算cv.imshow("cvOpen", cvOpen)#   kirsch算子m1 = np.array([[5, 5, 5], [-3, 0, -3], [-3, -3, -3]])m2 = np.array([[-3, 5, 5], [-3, 0, 5], [-3, -3, -3]])m3 = np.array([[-3, -3, 5], [-3, 0, 5], [-3, -3, 5]])m4 = np.array([[-3, -3, -3], [-3, 0, 5], [-3, 5, 5]])m5 = np.array([[-3, -3, -3], [-3, 0, -3], [5, 5, 5]])m6 = np.array([[-3, -3, -3], [5, 0, -3], [5, 5, -3]])m7 = np.array([[5, -3, -3], [5, 0, -3], [5, -3, -3]])m8 = np.array([[5, 5, -3], [5, 0, -3], [-3, -3, -3]])filterlist = [m1, m2, m3, m4, m5, m6, m7, m8]  # 将各个方向的卷积核放到一起便于统一操作filtered_list = np.zeros((8, cvOpen.shape[0], cvOpen.shape[1]))  # 建立三维数组,第0维表示各个方向卷积后的值for k in range(8):out = cv.filter2D(cvOpen, cv.CV_16S, filterlist[k])  # 自定义卷积,其实里面的步骤跟Sobel算子是差不多的filtered_list[k] = outfinal = np.max(filtered_list, axis=0)  # 取八个方向中的最大值,也就是取第0维的最大值作为图像该点,滤波之后的新的像素值final[np.where(final >= 255)] = 255  # 令像素值大于255的点等于255final[np.where(final < 255)] = 0  # 令像素值小于255的点等于0cv.imshow("final", final)#   判断try:m = []w = []p = []height = int(final.shape[0])width = int(final.shape[1])i = 0while i < height-1:n = []if len(m) < 20:for j in range(10, width-1):if final[i, j] == final[i, j+1] and final[i, j+1] == 0:j += 2elif final[i, j] != final[i, j+1] and final[i, j + 1] == 255:n.append(j+1)# print(n)if len(n) != 0:w.append(n)m.append(len(n))i += 2a = 0t = 1for k in range(len(m)):if m[k] == 0:p.append(0)if m[k] == 1:p.append((2*w[k][0] + 40)/2)if m[k] == 2:p.append((w[k][0] + w[k][1])/2)if m[k] == 3:p.append((w[k][0] + 40)/2)# if 60 < sum(m) <= 80 and a == 0:#     if t == 1:#         p.append((w[k][0] + w[k][1]) / 2)#     elif t == 2:#         p.append((w[k][3] + w[k][2]) / 2)#     elif t == 3:#         p.append((w[k][0] + w[k][1]) / 2)#     elif t == 4:#         p.append((w[k][0] + w[k][1]) / 2)#     a = 1# elif m[k] == 2 and a:#     t += 1#     a = 0p.remove(max(p))p.remove(min(p))print("距离中心:%.2f" %(165-sum(p)/(len(p)-1)))except Exception as e:print(e)low_yellow = np.array([26, 43, 46])high_yellow = np.array([34, 255, 255])mask = cv.inRange(res2, low_yellow, high_yellow)open = cv.morphologyEx(mask, cv.MORPH_OPEN, kernel)edges = cv.Canny(open, 10, 20)cnts, _ = cv.findContours(edges, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)if len(cnts) > 0:breakcv.imshow("mask", edges)if cv.waitKey(1) == ord('q'):breakcap.release()cv.destroyAllWindows()if __name__ == "__main__":xunji()

opencv黑白线循迹相关推荐

  1. 黑白线循迹小车利用STM32F407与三个红外对管实现

    小车循迹模块编程思路 所用模块:LM399红外对管循迹模块 特征:可同时搭载4个红外对管,进行黑白线检测 检测:当它探寻到黑线时候,DX口输出TTL电平接近于VCC电压 当它探寻到白线时候,DX口输出 ...

  2. 第十七届CH32V307多车组头尾双车摄像头传统扫线循迹

    一.传统的扫线循迹,网上的资料繁杂,开源资料或者博客破碎化 1.我于2021年10份正式接触摄像头,在到最终比赛期间,遇到了不少困难和迷惑的地方,接下来我会阐述摄像头小车整个从图像处理到实现循迹的大概 ...

  3. 基于STM32F103单片机的智能扫地机器人 循迹避障车 原理图PCB设计

    系统功能设计 (末尾附文件) 本系统由STM32F103C8T6单片机核心板.2路红外避障模块.2路按键.风扇驱动.电机驱动.升压模块.锂电池充电模块及电池盒供电组成. 1.按下启动按键后,小车启动, ...

  4. arduino黑线循迹小车程序_循迹小车:给我一条线,我能自己走完全程

    在老少通吃的智能小车到底是什么呢?科普来喽!一文中,我们介绍了智能小车的分类及组成,为什么循迹小车能够追踪黑线轨迹呢? 智能小车在画有黑线的白纸 "路面"上行驶,由于黑线和白纸对光 ...

  5. 如何让小型双轮差速底盘实现视觉循迹功能

    1. 任务描述 在机器人小车(R023d)上搭载摄像头,摄像头采集图像信息并通过WiFi将信息传递给PC端,然后PC端使用OpenCV对摄像头读取到的视频进行灰度化.高斯滤波.腐蚀.膨胀等处理,使图像 ...

  6. 智能循迹避障小车C语言程序编写思路,设计一个循迹避障一体的智能小车的资料和代码及电路图详细概述...

    一) 小车功能实现描述 利用光电传感(红外对射管,红外发射与接收二极管组成)检测黑白线,实现小车能跟着白线(或黑线)行走,同时也可避开障碍物,即小车寻迹过程中,若遇障碍物可自行绕开,绕开后继续寻迹. ...

  7. 智能循迹小车_智能机器人之循迹小车——循迹原理

    智能机器人之循迹小车 --循迹原理 01 什么是循迹小车 循迹小车是指使用一定的循迹方法,使得小车自动循着赛道运行的小车. 02 循迹小车原理 循迹一般是黑色轨迹,传感器发出红外信号被接收后收入比较器 ...

  8. 51单片机 简易光电循迹小车

    前言 应学校暑期课程要求,也作为和小组成员完成一次对51单片机的练手,制作了简易的光电小车,完成了循迹功能,下面包括较为详细的小车搭建过程以及完整代码. 硬件部分准备 电源 可充电的电池组是智能车的唯 ...

  9. 简单循迹小车实验心得_红外自动循迹小车实验报告

    红外自动循迹小车实验报告 1摘要 本实验完成采用红外反射式传感器的自寻迹小车的设计与实现.采用与白色地面色差很大的黑色 路线引导小车按照既定路线前进,在意外偏离引导线的情况下自动回位,并能显示小车停止 ...

最新文章

  1. 浏览器页面有哪三层构成,分别是什么,作用是什么
  2. MySql wait_timeout问题解决办法。
  3. 注重网站用户体验优化就要避开前方弯道
  4. Easyui textbox 组件设置css样式
  5. 【存储知识学习】第五章-5.1-5.3 RAID磁盘阵列-《大话存储》 阅读笔记
  6. 网站down掉后,自动发信的shell
  7. 杂项-Java:JSP
  8. Unable to install breakpoint in Modify compiler options to generate line number attributes
  9. linux arm交叉编译ko,Ubuntu嵌入式交叉编译环境arm-linux-gcc
  10. Robot Framework(4)——Selenium2Library关键字
  11. mac vulkan_在 macOS 上开发 Vulkan 程序
  12. 关于cad生成dwf文件和插入dwf快
  13. Mysql文件夹删除不了
  14. 带你彻底搞懂Android启动速度优化!吐血整理
  15. 本机可以访问8080端口,外网不能访问的解决方案
  16. 学习笔记 51单片机通用软件延时方法
  17. Avalonia学习实践(二)--跨平台支持及发布
  18. 将正方形矩阵顺时针转动90度(Java)
  19. 广域网(PPP协议和HDLC协议)
  20. 前端年后面试真题,会80%直接进大厂

热门文章

  1. ByteBuffer.allocateDirect()
  2. java中润lda,机油_中润圣驰-网商汇
  3. 知足常乐,永不言弃!
  4. promise finally无论成功或失败都执行
  5. 安装Zotero之后打开word没有相应的加载项解决方案
  6. 织梦cms/dedecms清理冗余废弃未引用图片方法
  7. sql中带有like时如何使用预编译。
  8. 股票市场的心理防线(转自闽发论坛)
  9. 平面解析几何----抛物线焦点三角形面积公式
  10. RX-Explorer 使用体验:一款实用的 Windows 资源管理器