python摄像头一直打开,在其轮廓周长大于1/2时,开始采集从这一时刻开始到3秒后结束采集坐标点或者前100帧的所有图像左极值点,并将所有左极值点垂直像素进行排序,分别求出纵坐标和横坐标的最大值和最小值之差,然后将差值显示
时间: 2023-05-31 16:05:25 浏览: 90
基于OpenCV的人脸识别-python3
5星 · 资源好评率100%
在屏幕上。
下面是一个实现上述功能的Python代码示例:
```python
import cv2
import numpy as np
import time
# 打开摄像头
cap = cv2.VideoCapture(0)
# 定义左极值点列表
left_points = []
# 开始时间
start_time = None
while True:
# 读取帧
ret, frame = cap.read()
# 转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 100, 200)
# 轮廓检测
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓
for contour in contours:
# 计算轮廓的周长
perimeter = cv2.arcLength(contour, True)
# 如果周长大于图像宽度的一半
if perimeter > frame.shape[1] / 2:
# 如果还没有开始采集
if start_time is None:
# 记录开始时间
start_time = time.time()
# 如果已经采集了3秒或100帧
if time.time() - start_time > 3 or len(left_points) >= 100:
# 计算纵坐标和横坐标的最大值和最小值之差
x_diff = max([p[0] for p in left_points]) - min([p[0] for p in left_points])
y_diff = max([p[1] for p in left_points]) - min([p[1] for p in left_points])
# 显示差值
cv2.putText(frame, f'x_diff={x_diff}, y_diff={y_diff}', (50, 50), cv2.FONT_HERSHEY_SIMPLEX,
1, (0, 0, 255), 2)
# 清空左极值点列表和开始时间
left_points = []
start_time = None
else:
# 找到左极值点
leftmost = tuple(contour[contour[:, :, 0].argmin()][0])
# 将左极值点加入列表
left_points.append(leftmost)
# 显示帧
cv2.imshow('frame', frame)
# 按下q键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
```
阅读全文