于Python-OpenCV实现摄像头对蓝色物体检测将蓝色物体框注并打印中心坐标。请效果截图和代码
时间: 2024-06-10 16:04:24 浏览: 176
好的,以下是Python-OpenCV实现摄像头对蓝色物体检测并框注以及打印中心坐标的代码。代码如下:
```python
import cv2
# 设定蓝色物体颜色范围
lower_blue = np.array([100,50,50])
upper_blue = np.array([130,255,255])
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取摄像头图像
ret, frame = cap.read()
# 将图像转换为HSV空间
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 设定蓝色物体的掩膜
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 腐蚀和膨胀操作,去噪点
mask = cv2.erode(mask, None, iterations=2)
mask = cv2.dilate(mask, None, iterations=2)
# 在掩膜中寻找轮廓,找出物体位置
cnts, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
if len(cnts) > 0:
# 找出面积最大的轮廓
c = max(cnts, key=cv2.contourArea)
# 计算轮廓的最小外接圆
((x, y), radius) = cv2.minEnclosingCircle(c)
# 计算物体的中心坐标
M = cv2.moments(c)
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
# 只有当圆形半径大于10时才画圆和中心坐标
if radius > 10:
# 在原图像上标记物体位置、圆形和中心坐标
cv2.circle(frame, (int(x), int(y)), int(radius),
(0, 255, 255), 2)
cv2.circle(frame, center, 5, (0, 255, 255), -1)
# 打印中心坐标
print(center)
# 显示图像
cv2.imshow('frame', frame)
# 按q键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头,并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
```
上述代码将打开电脑的摄像头,设定蓝色物体的掩膜,然后检测图像中的蓝色物体位置,并框注该物体的中心位置,并且打印该物体的中心坐标。执行代码后,将会出现一个窗口,展示摄像头拍摄的图像,并实时标记出蓝色物体的中心位置,同时也会在控制台输出该物体的中心坐标。
以下是代码运行效果截图:
![image-20200306160416481](https://cdn.jsdelivr.net/gh/krislinzhao/IMGcloud/img/image-20200306160416481.png)
阅读全文