本文翻译自胡子哥哥博客,原文地址:

https://pysource.com/2019/01/04/eye-motion-tracking-opencv-with-python/#

有视频版本,可以去上面链接看英文版,也可以去B站关注【周旋学opencv】看我搬运的加了中英双字幕的版本。

下面是正文。

了解眼的构造

在进入图像处理的细节之前,让我们稍微研究一下眼睛,让我们想想有什么可能的解决方案。

在下面的图片中我们看到一只眼睛。眼睛由三个主要部分组成:

  • 瞳孔——中间的黑色圆圈
  • 虹膜——更大的圆圈,不同的人可以有不同的颜色
  • 巩膜——它总是白色的

现在我们来编写第一部分的代码,在第一部分中我们导入眼睛移动的视频。之后我们会考虑跟踪运动的解决方案。

我们导入Opencv和numpy库,加载视频“eye_recording”。然后我们把它放入一个循环中,这样我们就可以循环视频的帧并处理一幅一幅的图像。

import cv2
import numpy as np
cap = cv2.VideoCapture("eye_recording.flv")
while True:ret, frame = cap.read()if ret is False:break

现在让我们选择一个Roi(感兴趣的区域)。通过这种方法,我们将检测范围限制在瞳孔、虹膜和巩膜上,并切除了所有不必要的东西,如睫毛和眼睛周围的区域。

roi = frame[269: 795, 537: 1416]
rows, cols, _ = roi.shape
gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
gray_roi = cv2.GaussianBlur(gray_roi, (7, 7), 0)

现在我们可以更深入地寻找探测运动的正确方法。
让我们看看眼睛可能拥有的所有方向(如下图所示),然后找出它们之间的共同点和不寻常之处。

从这幅图中我们能了解到什么?
从左边开始,我们可以看到巩膜覆盖了瞳孔和虹膜指向的另一边。当眼睛直视时,左右两边的巩膜都很平衡。

检测运动

对于检测,我们可以使用不同的方法,聚焦于巩膜、虹膜或瞳孔。
我们要用最简单的方法,也可能是最好的解决方案。

我们只关注瞳孔。通过将图像转换为灰度格式,我们将看到瞳孔总是比眼睛的其他部分更暗。不管眼睛在看什么,不管人的巩膜是什么颜色。

我们来做这个。首先进行灰度变换

然后找到阈值,只提取瞳孔。

 gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)gray_roi = cv2.GaussianBlur(gray_roi, (7, 7), 0)_, threshold = cv2.threshold(gray_roi, 3, 255, cv2.THRESH_BINARY_INV)

从阈值我们找到了轮廓。我们简单地去除所有的噪音,选择面积最大的元素(应该是瞳孔),然后忽略其余的。

  _, contours, _ = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)contours = sorted(contours, key=lambda x: cv2.contourArea(x), reverse=True)for cnt in contours:(x, y, w, h) = cv2.boundingRect(cnt)#cv2.drawContours(roi, [cnt], -1, (0, 0, 255), 3)cv2.rectangle(roi, (x, y), (x + w, y + h), (255, 0, 0), 2)cv2.line(roi, (x + int(w/2), 0), (x + int(w/2), rows), (0, 255, 0), 2)cv2.line(roi, (0, y + int(h/2)), (cols, y + int(h/2)), (0, 255, 0), 2)break

最后我们把所有的东西都显示在屏幕上。

    cv2.imshow("Threshold", threshold)cv2.imshow("gray roi", gray_roi)cv2.imshow("Roi", roi)key = cv2.waitKey(30)if key == 27:break
cv2.destroyAllWindows()

THE END

后续会更新更多光头哥哥,黑脸哥哥,胡子哥哥的opencv计算机视觉博客,欢迎大家关注公众号【opencv视觉实践】一起来学习吖,也会有很多原创有趣的案例以及学习资源的分享呢。

opencv实现眼动检测【胡子哥哥】相关推荐

  1. opencv 手选roi区域_利用opencv进行眼动检测

  2. 运用特征脸方法的基于Opencv的猫脸检测实现

    本文禁止转载.抄袭,请尊重作者权利. 使用特征脸方法的基于Opencv的猫脸检测实现 摘要 目前,在计算机视觉和模式识别领域,脸识别技术是一个很活跃的课题,人脸识别的方法已经十分丰富,而对于日常生活中 ...

  3. 使用Python,OpenCV和Hough圆检测图像中的圆

    使用Python,OpenCV和Hough圆检测图像中的圆 1. 效果图 2. cv2.HoughCircles(image, method, dp, minDist) 3. 源码 参考 前几篇博客中 ...

  4. 用C++ 和OpenCV 实现视频目标检测(YOLOv4模型)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 据说,现在很多小区都上线了AI抓拍高空抛物的黑科技,可以自动分析抛物 ...

  5. opencv 裁剪 java_如何在opencv java中裁剪检测到的面部图像

    我在 java中使用opencv 2.4.10检测到图像中的面部 我把我的面部检测代码. import org.opencv.core.Core; import org.opencv.core.Mat ...

  6. 用 Opencv 和 Python 模糊检测

    用 Opencv 和 Python 模糊检测 在刚刚过去的这个周末,我坐下来想在 iphoto 中整理这些海量的照片.这不仅仅意味着巨大的工作量,因为我很快注意到一个现象--其中充斥着大量模糊的照片. ...

  7. 使用OpenCV进行人脸关键点检测

    使用OpenCV进行人脸关键点检测 1 双脸效果 2 单脸效果

  8. OpenCV Fast角点检测

    FAST是一种用于角点检测的算法,该算法的原理是取图像中检测点,以改点为圆心的周围邻域内像素点判断监测点是否为角点. OpenCV中的FAST检测算法是用传统方法实现的. 实例化fast fast = ...

  9. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  10. MFC+OPENCV实现角点检测

    MFC+OPENCV实现角点检测: // 角点检测 // 根据<基于OpenCV的计算机视觉技术实现>#define max_corners 200; // 限定的最大角点数IplImag ...

最新文章

  1. 【硬件基础】制作直流电源
  2. BCH独立日最好的礼物——Token发行已实现
  3. 用php生成html文件,怎样用PHP生成html文件
  4. 当前元素_90行代码,15个元素实现无限滚动
  5. C++class类(II)
  6. 关于VMware虚拟机的上网
  7. codeforces 486A-C语言解题报告
  8. OpenCV vs Dlib 人脸检测比较分析
  9. navmenu 收起没有动画 element_ABC360等3家英语动画片课程测评:用动画片学英语不靠谱?...
  10. exosip register代码
  11. SOA学习笔记001---SOA 服务架构之简介及理解
  12. Cookie、LocalStorage 与 SessionStorage的区别
  13. python办公ppt_最全总结 | 聊聊 Python 办公自动化之 PPT(中)
  14. 系统自带的3D模型控件
  15. 宗地图绘制要求和规范_宗地图绘制的基本要求与内容.ppt
  16. KnockoutJs dynamic Binding
  17. Java根据出生年月日计算年龄
  18. WWW2023即将截稿
  19. golang中channal容量的问题
  20. NCB:神经元线粒体应激记忆可通过mtDNA水平升高跨代遗传

热门文章

  1. 加多宝李二强:营销数字化闭环初体验,真的很爽
  2. 最大数[抽象排序之抽象规则]
  3. C盘里的HTML是什么文件,C盘Windows下的winsxs是什么文件可以删除吗
  4. 接口自动化测试框架介绍
  5. JavaSE数组基础练习题
  6. 达梦数据库的服务启动
  7. 编译原理——自下而上语法分析
  8. Firefox Pale Moon此连接是不受信任的、无效的安全证书解决办法
  9. Excel如何快速查询银行卡开户行?
  10. 苹果数据线突然不能充电了_苹果8p突然不能充电了,充不进电!