电赛滚球控制系统树莓派代码

基础加发挥部分
图像二值化后,提取最大色块获得坐标即为小球坐标
只提取图像中间部分,避免外界非平板部分干扰
串口通信用的ttyUSB0口,直接一根数据线和stm32的串口1相连就可以了
连接屏幕可以展示效果,但也许有时候展示效果会耗时,建议到时候注释掉展示部分

#获取圆圈坐标并用串口通信将坐标r送到stm32进行处理
# -*- coding: utf-8 -*
import serial
import time
import cv2
import numpy as npcap = cv2.VideoCapture(0)
lower_red=np.array([156,43,46])
upper_red=np.array([180,255,255])def DisBall(x,y,r,frame):cv2.circle(frame, (x,y) , r , (0, 255, 0), 2)cv2.circle(frame, (x,y) , 2 , (0, 0, 255), 3)return framedef Binary_Get_Ball(frame,show,area,thr):cropped = frame[area[0]:area[1], area[2]:area[3]]  #(上,下)(左,右)gray_img = cv2.cvtColor(cropped, cv2.COLOR_BGRA2GRAY)#图像灰度化ret,thresh=cv2.threshold(gray_img,thr[0],thr[1],cv2.THRESH_BINARY)thresh=255-threshcnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]  #轮廓检测#如果存在轮廓  if len(cnts) > 0:  #找到面积最大的轮廓  c = max(cnts, key = cv2.contourArea)  #确定面积最大的轮廓的外接圆  ((center_x, center_y), radius) = cv2.minEnclosingCircle(c)  if (show==True): cv2.circle(cropped, (int(center_x), int(center_y)), int(radius), (0, 255, 255), 2)  cv2.circle(cropped, None, 5, (0, 0, 255), -1)print('红色色块的中心坐标',(int(center_x),int(center_y)))else:center_x=0center_y=0radius=0return center_x,center_y,radius,croppedif __name__=="__main__":# 打开串口ser = serial.Serial("/dev/ttyUSB0", 9600, timeout=0.2)#剪切区域(上,下)(左,右)area=[40,435,155,540]#二值化阈值thr=[80,255]time1=time.time()while(1):ret, frame = cap.read()#得到小球坐标x,y,r,frame=Binary_Get_Ball(frame,show=True,area=area,thr=thr)time_change=time.time()-time1time_change=int(time_change*1000)print('time:'+str(time_change).rjust(3,'0'))#展示画圆效果x=int(x)y=int(y)r=int(r)frame = DisBall(x,y,r,frame)send_data='#'+str(x).rjust(3,'0')+str(y).rjust(3,'0')+str(time_change).rjust(3,'0') #起始标志'#',圆心的x和yser.write(send_data.encode("utf8"))print(send_data)if (x==0 and y==0 and r==0):passelse:time1=time.time()# 展示图片cv2.imshow("capture", frame)if cv2.waitKey(1) & 0xFF == ord('q'):# 存储图片cv2.imwrite("camera.jpg", frame)breakif ser != None:ser.close()cap.release()
cv2.destroyAllWindows()

发挥题其他:追光者(追踪红色激光)

#获取圆圈坐标并用串口通信将坐标r送到stm32进行处理
# -*- coding: utf-8 -*
import serial
import time
import cv2
import numpy as npcap = cv2.VideoCapture(0)
lower_red=np.array([156,43,46])
upper_red=np.array([180,255,255])def DisBall(x,y,r,frame):cv2.circle(frame, (x,y) , r , (0, 255, 0), 2)cv2.circle(frame, (x,y) , 2 , (0, 0, 255), 3)return framedef Binary_Get_Point(frame,show,area,thr,thr1):cropped = frame[area[0]:area[1], area[2]:area[3]]  #(上,下)(左,右)gray_img = cv2.cvtColor(cropped, cv2.COLOR_BGRA2GRAY)#图像灰度化ret,thresh=cv2.threshold(gray_img,thr[0],thr[1],cv2.THRESH_BINARY)ret,thresh1=cv2.threshold(gray_img,thr1[0],thr1[1],cv2.THRESH_BINARY)thresh=255-threshcnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]  #轮廓检测cnts1 = cv2.findContours(thresh1.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]  #轮廓检测#如果存在轮廓  if len(cnts) > 0:  #找到面积最大的轮廓  c = max(cnts, key = cv2.contourArea)  #确定面积最大的轮廓的外接圆  ((center_x, center_y), radius) = cv2.minEnclosingCircle(c)  if (show==True): cv2.circle(cropped, (int(center_x), int(center_y)), int(radius), (0, 255, 255), 2)  cv2.circle(cropped, None, 5, (0, 0, 255), -1)print('小球的中心坐标',(int(center_x),int(center_y)))else:center_x=0center_y=0radius=0#如果存在轮廓  if len(cnts1) > 0:  #找到面积最大的轮廓  c1 = max(cnts1, key = cv2.contourArea)  #确定面积最大的轮廓的外接圆  ((center_x1, center_y1), radius1) = cv2.minEnclosingCircle(c1)  if (show==True): cv2.circle(cropped, (int(center_x1), int(center_y1)), int(radius1), (0, 255, 255), 2)  cv2.circle(cropped, None, 5, (0, 0, 255), -1)print('激光的坐标',(int(center_x1),int(center_y1)))else:center_x1=0center_y1=0radius1=0return center_x,center_y,radius,center_x1,center_y1,radius1,croppedif __name__=="__main__":# 打开串口ser = serial.Serial("/dev/ttyUSB0", 9600, timeout=0.2)#剪切区域(上,下)(左,右)area=[40,435,155,540]#二值化阈值thr=[80,255]thr1=[200,255]time1=time.time()while(1):ret, frame = cap.read()x,y,r,x1,y1,r1,frame=Binary_Get_Point(frame,show=True,area=area,thr=thr,thr1=thr1)time_change=time.time()-time1time_change=int(time_change*1000)print('time:'+str(time_change).rjust(3,'0'))#展示画圆效果x=int(x)y=int(y)r=int(r)x1=int(x1)y1=int(y1)r1=int(r1)frame = DisBall(x,y,r,frame)frame = DisBall(x1,y1,r1,frame)send_data='#'+str(x).rjust(3,'0')+str(y).rjust(3,'0')+str(time_change).rjust(3,'0') #起始标志'#',圆心的x和yser.write(send_data.encode("utf8"))print(send_data)send_data='$'+str(x1).rjust(3,'0')+str(y1).rjust(3,'0')+str(time_change).rjust(3,'0')ser.write(send_data.encode("utf8"))   print(send_data)     if (x==0 and y==0 and r==0):passelse:time1=time.time()        # 展示图片cv2.imshow("capture", frame)if cv2.waitKey(1) & 0xFF == ord('q'):# 存储图片cv2.imwrite("camera.jpg", frame)breakif ser != None:ser.close()cap.release()
cv2.destroyAllWindows()

电赛滚球控制系统树莓派代码相关推荐

  1. 备战电设 滚球控制系统——机械结构

    我的演示视频在这里 目前我也在备战19 年电设哈,所以先拿17 年的题目来积累积累经验,我这次做的就是控制类的题目--滚球控制系统 滚球控制系统 这是我的最终成品,我们做的是缩小版的,30*30cm ...

  2. 滚球控制系统详解 —— (附核心代码)

    最近练习了17年的国赛题 -- 滚球控制系统 这里展示一下画圆: 观看完整视频点这里 接下来,我来分享一下从搭整体结构到调试完的过程. 这是我搭完的整体结构 (缩小版) (不管什么题,结构部分还是很重 ...

  3. html代码3D滚球游戏代码,滚球控制系统代码

    [实例简介] 基于stm32f407的滚球控制系统代码的嵌入式部分 嵌入式接收视觉传送的关于小球的位置信息(x,y)通过pid处理之后 驱动舵机控制板子运动使小球到达指定位置 [实例截图] [核心代码 ...

  4. 2017全国大学生电子设计竞赛个人总结--B题滚球控制系统

    本人有幸参加2017年全国大学生电子设计大赛,并在西安通过努力进入到优秀作品展示,虽然与瑞萨杯失之交臂,但是感觉从比赛中学到了许多知识和临场发挥的经验,这些经验和进步必将伴随我的未来. 首先来说说组队 ...

  5. 【Arduino】2017年电子设计大赛B题 滚球控制系统|板球系统

    **本文由@ray 出品,转载请注明出处. ** **文章链接: ** http://blog.csdn.net/wz22881916/article/details/78161080 今年电赛我们队 ...

  6. 2021电赛F题视觉教程+代码免费开源

    2021电赛F题视觉教程+代码免费开源 最近好多要电赛题的源码,其他csdn营销号下载都需要会员或钱,正好最近课设又要做一遍电赛小车题,哥们先把代码开源了,饿死营销号 电赛宝藏链接: 四天三夜,那布满 ...

  7. 滚球控制系统(B 题 本科组)-- 2017 年全国大学生电子设计竞赛试题

    滚球控制系统(B 题 本科组)-- 2017 年全国大学生电子设计竞赛试题 一.任务 二.要求 2.1.基本部分 2.2.发挥部分 三.说明 3.1.系统结构要求与说明 3.2.测试要求与说明 四.评 ...

  8. 滚球控制系统视觉部分代码-Python

    2017年电赛控制方向,视觉部分,Python写的. 处理设备:Jetson Nano 摄像头:KS1A552,100万像素,镜头2.4mm焦距. import cv2 #cv2读取的格式是BGR i ...

  9. 悬挂运动控制系统 源代码 (05年电赛)

    题目连接:05年电赛 悬挂运动控制系统 源代码 http://wenku.baidu.com/view/b51e3a25ccbff121dd3683bf.html 系统: 2块STM32   A为上位 ...

最新文章

  1. 迪士尼研究院等将人造“神经纤维”用于软体机器人,赋予其“本体感知能力”!...
  2. asp.net服务器控件button先执行js再执行后台的方法
  3. 魔兽世界怀旧服最新服务器开发时间,怀旧服开70最新消息汇总 魔兽怀旧服TBC开放时间几个阶段?...
  4. 程序员如何明智地提出好的问题
  5. 发布:NetBeans IDE 8.1 Beta
  6. Hive的数据模型—桶表
  7. 准备拉琴的zskame大白菜
  8. Tensorflow安装GPU环境
  9. 计算任意两个圆的交点
  10. JTable 的使用
  11. 锤击测试使用指数窗会引起什么问题吗?
  12. mtd设备操作、jffs2
  13. 【SEM】1 基本概念
  14. 拥有火绒后关闭Windows防火墙
  15. Git 学习进展 (补发)
  16. scala中的sealed
  17. 某灵JAVA互联网架构师专题/分布式/高并发/微服务
  18. JointJS几个实用功能的简单实现
  19. 18:Tomorrow never knows?
  20. 一个稳定的相对成熟的通用管理软件的底层及后台管理值多少钱?(您积累的成果物有多少艰辛付出)

热门文章

  1. JSP+MySQL电子图书馆借还及查询系统
  2. Java实现pdf转HTML | WORD | EXCEL | PPT | PNG | TXT 教程
  3. Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换
  4. 微信医院预约挂号小程序系统设计与实现
  5. 用友U8视频教程全集(库存管理)-金速鹏-专题视频课程
  6. 关于android手机文件目录的收集
  7. 「BZOJ3930」「CQOI2015」选数
  8. 计算机软件硬件边界如何定义,软件定义汽车,但别忘了硬件定义了软件的边界...
  9. Matlab绘图基础——colormap在数字图像处理及三维图形展示上的应用(分层设色)...
  10. pygame做一个古诗词填空通关游戏