树莓派——opencv循迹
没有上路尝试过,但是如果用纸可以完成上路应该没啥问题,但是应该要调调阈值,或者说改变循迹框的位置。如果想扩展至七路或者九路循迹,或者想要调整框的间距就改变这里。这是一个五路循迹代码,如果检测到黑色返回1,其他返回0,如果检测不到黑色,就改这个值,值越大,检测黑色能力就越强。以及这里,几路循迹就改成几个数值。最后再把00110发给主控就行了。
·
没有上路尝试过,但是如果用纸可以完成上路应该没啥问题,但是应该要调调阈值,或者说改变循迹框的位置
import cv2
import numpy as np
from picamera2 import Picamera2
from time import sleep
picam2 = Picamera2()
config = picam2.create_preview_configuration(main={"size": (640, 480)})
picam2.configure(config)
picam2.start()
sleep(2)
THRESHOLD = 50
BOX_WIDTH = 80
BOX_HEIGHT = 60
BOX_Y_POS = 400
def get_track_status(frame):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
track_status = [0, 0, 0, 0, 0]
center_x = frame.shape[1] // 2
box_positions = [
center_x - 2*BOX_WIDTH,
center_x - BOX_WIDTH,
center_x,
center_x + BOX_WIDTH,
center_x + 2*BOX_WIDTH
]
for i, x in enumerate(box_positions):
x = max(0, min(frame.shape[1]-BOX_WIDTH, x))
roi = gray[BOX_Y_POS:BOX_Y_POS+BOX_HEIGHT, x:x+BOX_WIDTH]
mean_val = np.mean(roi)
if mean_val < THRESHOLD:
track_status[i] = 1
color = (0, 255, 0) if track_status[i] else (0, 0, 255)
cv2.rectangle(frame, (x, BOX_Y_POS), (x+BOX_WIDTH, BOX_Y_POS+BOX_HEIGHT), color, 2)
return track_status
try:
while True:
frame = picam2.capture_array()
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
status = get_track_status(frame)
print("Track Status:", status)
cv2.putText(frame, str(status), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
cv2.imshow("Track Detection", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
finally:
picam2.stop()
cv2.destroyAllWindows()
这是一个五路循迹代码,如果检测到黑色返回1,其他返回0,
如果想扩展至七路或者九路循迹,或者想要调整框的间距就改变这里
box_positions = [
center_x - 2*SPACING,
center_x - SPACING,
center_x,
center_x + SPACING,
center_x + 2*SPACING
]
以及这里,几路循迹就改成几个数值
track_status = [0, 0, 0, 0, 0]
如果检测不到黑色,就改这个值,值越大,检测黑色能力就越强
THRESHOLD = 50
运行结果如下:
最后再把00110发给主控就行了
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)