树莓派——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发给主控就行了
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)