请用Python写出opencv循迹代码
时间: 2023-06-15 09:08:21 浏览: 204
基于python的opencv实战代码
以下是一个基本的opencv循迹代码,用Python编写:
```
import cv2
# 设置摄像头参数
cap = cv2.VideoCapture(0)
cap.set(3, 640) # 设置摄像头宽度
cap.set(4, 480) # 设置摄像头高度
cap.set(10, 100) # 设置亮度
# 设定目标颜色范围,这里以红色为例
myColors = [[0, 120, 70, 10, 255, 255], [170, 120, 70, 180, 255, 255]]
# 设定目标轮廓
myPoints = []
# 获取目标颜色的轮廓
def findColor(img, myColors):
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
for color in myColors:
lower = np.array(color[0:3])
upper = np.array(color[3:6])
mask = cv2.inRange(imgHSV, lower, upper)
x, y = getContours(mask)
cv2.circle(imgResult, (x, y), 10, myColorValues[count], cv2.FILLED)
if x != 0 and y != 0:
myPoints.append([x, y, count])
# 获取目标轮廓
def getContours(img):
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
x, y, w, h = 0, 0, 0, 0
for cnt in contours:
area = cv2.contourArea(cnt)
if area > 500:
peri = cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, 0.02*peri, True)
x, y, w, h = cv2.boundingRect(approx)
return x+w//2, y # 返回轮廓的中心坐标
# 进行循迹
def drawOnCanvas(myPoints, myColorValues):
for point in myPoints:
cv2.circle(imgResult, (point[0], point[1]), 10, myColorValues[point[2]], cv2.FILLED)
# 设定目标颜色
myColorValues = [[0, 0, 255], [0, 255, 0]] # 红色,绿色
while True:
success, img = cap.read()
imgResult = img.copy()
findColor(img, myColors)
if len(myPoints) != 0:
drawOnCanvas(myPoints, myColorValues)
# 显示循迹效果
cv2.imshow("Result", imgResult)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
```
该代码基于OpenCV库,通过处理摄像头拍摄到的图像,找出目标颜色的轮廓,然后进行循迹。具体实现过程中,需要设定目标颜色范围、目标轮廓、获取目标颜色的轮廓、获取目标轮廓、进行循迹等步骤。
阅读全文