在python中实时计算像素之间的距离

2024-09-24 22:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是图像处理的初学者。我想在python中使用openCV从网络摄像头检测眼球运动。我使用以下代码片段检测右眼:

eye_cascade = cv2.CascadeClassifier('haarcascade_righteye_2splits.xml')
eyes = eye_cascade.detectMultiScale(gray, minSize=(30, 30))

for (ex, ey, ew, eh) in eyes:
    cv2.rectangle(frame, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)

    print(str(ex)+'b'+str(ey))
    print("Sent\n")

它实时显示我右眼的像素,如下所示:

.
.
.
260b216
Sent

261b219
Sent
.
.
.

当我移动眼睛时,我可以看到像素值的变化,但我希望python计算两个连续像素值之间的距离:sqrt((261-260)^2+(219-216)^2),并将此值实时显示为输出。我必须使用哪些numpy/math/其他函数来实现这一点


Tags: 像素cv2图像处理excascadesenteyeprint
1条回答
网友
1楼 · 发布于 2024-09-24 22:21:49

要计算两个连续帧之间的欧几里德距离。(source

您可以初始化计数器cnt以对两个连续帧进行计数。每次获得(ex, ey, ew, eh)时,将cnt增加一。如果获得两个连续帧,请计算它们之间的距离并打印

要计算距离,需要存储以前的坐标(exy_prv)和当前坐标(exy_cur

下面是一个示例代码:

import numpy as np

eyes = [[260, 216, 260 + 50, 216 + 50],
        [261, 219, 261 + 50, 219 + 50],
        [262, 222, 262 + 50, 222 + 50],
        [263, 224, 263 + 50, 224 + 50]]

cnt = 1
exy_prv = []
dist = None

for (ex, ey, ew, eh) in eyes:
    if cnt % 2 == 0:
        exy_cur = np.array((ex, ey))
        dist = np.linalg.norm(exy_cur - exy_prv)
        cnt = 1
        exy_cur = exy_prv

    # cv2.rectangle(frame, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)

    print(str(ex)+'b'+str(ey))
    print("Sent\n")

    if dist is not None:
        print("distance: {}\n".format(dist))

    exy_prv = np.array((ex, ey))
    cnt += 1

结果


260b216
Sent

261b219
Sent

3.1622776601683795

262b222
Sent

3.1622776601683795

263b224
Sent

2.23606797749979

相关问题 更多 >