编写一段python程序,读取摄像头的视频流,动态识别图像中的多个二维码,在界面左侧实时显示摄像头读取的视频,标出其中二维码的位置,在右侧输出坐标,以及运动轨迹
时间: 2024-10-10 15:06:47 浏览: 38
要实现在Python中使用OpenCV(cv2)读取摄像头视频流并检测二维码,你需要安装`opencv-python`库。以下是一个基本的示例程序,它演示了如何获取视频流、检测二维码以及在屏幕上显示结果:
```python
import cv2
import numpy as np
# 加载二维码识别器
from pyzbar.pyzbar import decode
def draw_rectangle(image, points):
# 绘制矩形
cv2.rectangle(image, (points[0], points[1]), (points[2], points[3]), (0, 255, 0), 2)
def detect_qr_codes(frame):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
decoded_objects = decode(gray)
for obj in decoded_objects:
# 提取二维码的左上角和右下角坐标
top_left = obj.polygon[0]
bottom_right = obj.polygon[-1]
# 计算并绘制矩形
draw_rectangle(frame, (top_left[0], top_left[1], bottom_right[0], bottom_right[1]))
# 输出坐标
print(f"QR Code found at ({top_left[0]}, {top_left[1]}) - ({bottom_right[0]}, {bottom_right[1]})")
# 初始化摄像头
cap = cv2.VideoCapture(0) # 使用默认摄像头,如果有多台,请替换为相应序号
while True:
ret, frame = cap.read()
if not ret:
break
# 检测二维码
detect_qr_codes(frame)
# 显示原始视频帧和标记的二维码
cv2.imshow('Live QR Detection', frame)
# 如果按下 'q' 键,退出循环
key = cv2.waitKey(1)
if key == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
```
这个程序首先导入必要的库,然后定义一个函数用于检测二维码并在原图上画出边框。主循环中,我们从摄像头读取每一帧,调用`detect_qr_codes`函数处理帧并显示结果。当你按下键盘上的 'q' 键时,程序会停止。
阅读全文