【问题标题】:Calculating distance between pixels in real time in python在python中实时计算像素之间的距离
【发布时间】:2020-12-13 23:29:42
【问题描述】:

我是图像处理的初学者。我想在 python 中使用 openCV 检测网络摄像头的眼球运动。我正在使用这段代码 sn-p 来检测右眼:

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/其他函数来实现这一点?

【问题讨论】:

标签: python numpy opencv image-processing


【解决方案1】:

您想计算两个连续帧之间的欧几里得距离。 (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

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2014-11-16
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多