https://blog.csdn.net/qq_37760746/article/details/103044315
树莓派python+opencv颜色识别、跟随、巡线小车
首先树莓派必须安装opencv。
import numpy as np
import cv2
import RPi.GPIO as GPIO
GPIO.setwarnings(False) #Echo G21(input) #trig G20
GPIO.setmode(GPIO.BCM)
GPIO.setup(22,GPIO.OUT)
GPIO.setup(27,GPIO.OUT)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
pwma=GPIO.PWM(18,100)
pwmb=GPIO.PWM(23,100)
pwma.start(100)
pwmb.start(100)
blue_lower = np.array([100,43,46])
blue_upper = np.array([124,255,255])
cap = cv2.VideoCapture(0)
pwma.ChangeDutyCycle(0)
GPIO.output(22,1)
GPIO.output(27,0)
pwmb.ChangeDutyCycle(0)
GPIO.output(25,True)
GPIO.output(24,False)
cap.set(3, 320) #x160
cap.set(4, 240) #y120
while 1:
ret, frame = cap.read()
frame = cv2.GaussianBlur(frame, (5, 5), 0)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, blue_lower, blue_upper)
mask = cv2.erode(mask, None, iterations=2)
mask = cv2.GaussianBlur(mask, (3, 3), 0)
res = cv2.bitwise_and(frame, frame, mask=mask)
cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
if len(cnts) > 0:
cnt = max(cnts, key=cv2.contourArea)
(x, y), radius = cv2.minEnclosingCircle(cnt)
cv2.circle(frame, (int(x), int(y)), int(radius), (255, 0, 255), 2)
print(int(x), int(y))
if int(x)>160:
pwma.ChangeDutyCycle(30)
GPIO.output(22,1)
GPIO.output(27,0)
pwmb.ChangeDutyCycle(30)
GPIO.output(25,0)
GPIO.output(24,1)
else:
pwma.ChangeDutyCycle(30)
GPIO.output(22,0)
GPIO.output(27,1)
pwmb.ChangeDutyCycle(30)
GPIO.output(25,1)
GPIO.output(24,0)
else:
pwma.ChangeDutyCycle(0)
GPIO.output(22,1)
GPIO.output(27,0)
pwmb.ChangeDutyCycle(0)
GPIO.output(25,True)
GPIO.output(24,False)
pass
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
if cv2.waitKey(5) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
一以下为颜色参照参数设置
————————————————
版权声明:本文为CSDN博主「qq_37760746」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37760746/java/article/details/103044315
叨叨几句... NOTHING