我有一个学校项目,在该项目中,我必须制作一条跟车路线,必须根据用户输入遵循特定的颜色线。当我仅用一种颜色并且没有用户输入来测试汽车的路线跟随能力时,该代码就可以正常工作,但是当我添加多种颜色和用户输入时,汽车不再希望遵循一条路线而只是驶入日落。我试图尝试代码,但没有运气。这是代码的while循环。
try: while(True): user = int(input("1 for blue line")) time.sleep(1)
ret, frame = cap.read()
crop_img = frame[60:120, 0:160]
_, img = cap.read()
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
if user == 1:
blue_lower = np.array([99,115,150],np.uint8)
blue_upper = np.array([110,255,255],np.uint8)
blue = cv2.inRange(hsv, blue_lower, blue_upper)
kernal = np.ones((5 ,5), "uint8")
blue=cv2.dilate(blue,kernal)
res=cv2.bitwise_and(img, img, mask = blue)
(contours,hierarchy)=cv2.findContours(blue,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for pic, contour in enumerate(contours):
area = cv2.contourArea(contour)
if(area>300):
x,y,w,h = cv2.boundingRect(contour)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
Controls()
else:
black_lower = np.array([0,0,0],np.uint8)
black_upper = np.array([50,50,100],np.uint8)
black = cv2.inRange(hsv, black_lower, black_upper)
kernal = np.ones((5 ,5), "uint8")
black = cv2.dilate(black,kernal)
res2 = cv2.bitwise_and(img, img, mask = black)
(contours,hierarchy)=cv2.findContours(black,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for pic, contour in enumerate(contours):
area = cv2.contourArea(contour)
if(area>300):
x,y,w,h = cv2.boundingRect(contour)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
Controls()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你提供的代码片段来看,你的项目涉及到使用OpenCV进行颜色识别和追踪,并根据用户输入选择追踪特定颜色的线。问题似乎出在代码逻辑以及可能的变量作用域或类型错误上。以下是一些建议来帮助你调试和改进代码:
用户输入处理:
input
函数只提供了蓝色路线的选择("1 for blue line"`),但没有为黑色或其他颜色提供选项。如果想要支持多色选择,请扩展输入提示并处理不同的用户输入。time.sleep(1)
,这可能会导致程序响应延迟,除非这是特意为了演示或控制节奏。颜色范围定义:
blue_lower
和blue_upper
)准确地匹配了实际场景中的颜色。当前的范围可能过于狭窄或不精确,特别是对于蓝色,可能导致在某些光照条件下无法正确识别。循环内的重复代码:
潜在的逻辑错误:
(x w,y h)
看起来像是一个拼接错误,应该是(x+w,y+h)
来正确表示矩形的右下角坐标。Controls()
函数调用没有显示其内容,确保它基于正确的参数(比如识别到的线的位置)来控制车辆,而不是无条件执行。性能与稳定性:
cv2.RETR_TREE
作为findContours
的检索模式可能不是最优选择,特别是在实时应用中。考虑使用cv2.RETR_EXTERNAL
来仅获取最外层轮廓,减少计算量。Controls()
函数内部是否对不同颜色有适当的处理逻辑,确保汽车能够根据识别到的线路做出正确反应。调试建议:
user
变量是否按预期接收到了用户的输入,并且在不同分支下程序逻辑是否正确执行。综上所述,你需要检查并修正上述提到的错误,同时优化代码结构,确保逻辑清晰且健壮。希望这些建议能帮助你解决问题!