我希望在远红外线关闭时检测眼球运动。我能够在热视频中检测到眼睛区域。一旦我拔出眼睛,计算闭眼的眼球运动是借助于眼睫毛的运动。
对于这部分我想到找到每个像素的强度值及其位置然后我将这些值存储为数组元素,即A [(x1,y1,z1),(x2,y2,z2) )......(XN,YN,ZN)]。其中x,y代表位置,z代表像素强度值。一旦我能够将这个裁剪掉的部分作为数组表示。然后我可以对此数组进行排序,然后根据像素强度值划分该数组。
这些值由很多强度组成,但是根据强度的出现,我将把它分成两个数组。 1.背景,因为它具有相同的强度值。 眼睛睫毛。
当我们得到第二个数组时,我将存储当前帧的这些(x,y,z)然后我重复此过程为下一帧我将获得另一个第二个数组然后我可以检查之间的区别(x,y)两帧。如果差异为0,则表示没有眼球运动,但如果它不为零,那么我们可以说眼睛运动有轻微的可检测变化。
import numpy as np
import cv2
import scipy
import matplotlib.pyplot as plt
from PIL import Image
from collections import Counter
blur_radius = 1.0
threshold = 50
A = ()
video = cv2.VideoCapture('12.avi')
while True:
ret, frame = video.read()
frame = frame[:,1:600]
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (15,15), 0)
(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray)
image = frame
(x,y) = maxLoc
cv2.circle(image, maxLoc, 15, (255, 0, 0), 2)
cv2.rectangle(image,(maxLoc),(390,190),(0,255,0),2)
roi = frame [y:190,x:390]
try:
roi = cv2.resize(roi, None, fx=4, fy=4, interpolation=cv2.INTER_AREA)
cv2.imshow("Eye",roi)
cv2.imshow("Eyecorner", image)
except:
print''
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video.release()
cv2.destroyAllWindows()
在单帧中检测到眼睛
来自热视频的裁剪眼睛区域
我不确定这是否是正确的做法。我无法弄清楚如何把上面的解释作为一个代码。这是一个微不足道的事情。对不起,如果这没有任何意义。