待检测图像:

期望的检测结果如下:

代码实现如下:
第一步先将原图像转换为灰度图像,然后来个二值化

#coding=utf-8
import cv2 as cv
import numpy as npsrc = cv.imread("/home/jon/code/python/img/eye_area.jpg")
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
cv.imshow("gray image", gray)
ret,binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow("binary image", binary)

结果如下:

先看下这张二值化的图片,要想得到眼球,我们可以通过一个圆形的结构元素,对这张图像做个开操作(先腐蚀再膨胀),但是还存在一个问题,中心的圆形区域还存在噪声,需要先把这个噪声剔除

element1 = cv.getStructuringElement(cv.MORPH_RECT,(3,3),(-1,-1))
tmp = cv.morphologyEx(binary,cv.MORPH_CLOSE,element1,None,(-1,-1),1)
cv.imshow("tmp image", tmp)


这样图像就干净了,去除了噪声后,我们也就可以通过圆形的结构元素提取眼球位置
注意:这里的矩形结构元素不能太大了,不然会把里面的2个大黑点当作噪声去除了,从而导致找不到眼球

element2 = cv.getStructuringElement(cv.MORPH_ELLIPSE,(16,16),(-1,-1))
dst = cv.morphologyEx(tmp,cv.MORPH_OPEN,element2)
cv.imshow("eye image", dst)


如上我们得到了眼球,下面只需要来个轮廓发现并填充颜色即可
注意:这里的圆形区域的大小需要适当大点,或许需要根据不同的图片坐下微调以达到理想的效果

cloneImage, contours, hierarchy = cv.findContours(dst, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE, None, None, (0, 0))
for i, contour in enumerate(contours):print "find "cv.drawContours(src, contours, i, (255, 0, 0), -1)cv.imshow("dst image", src)

完整的代码如下:

#coding=utf-8
import cv2 as cv
import numpy as npsrc = cv.imread("/home/jon/code/python/img/tpl.jpg")
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
cv.imshow("gray image", gray)
ret,binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow("binary image", binary)element1 = cv.getStructuringElement(cv.MORPH_RECT,(3,3),(-1,-1))
tmp = cv.morphologyEx(binary,cv.MORPH_CLOSE,element1,None,(-1,-1),1)
cv.imshow("tmp image", tmp)element2 = cv.getStructuringElement(cv.MORPH_ELLIPSE,(16,16),(-1,-1))
dst = cv.morphologyEx(tmp,cv.MORPH_OPEN,element2)
cv.imshow("eye image", dst)cloneImage, contours, hierarchy = cv.findContours(dst, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE, None, None, (0, 0))
for i, contour in enumerate(contours):print "find "cv.drawContours(src, contours, i, (255, 0, 0), -1)cv.imshow("dst image", src)cv.waitKey(0)
cv.destroyAllWindows()

OpenCV如何提取人眼区域的眼球位置相关推荐

  1. opencv 九 提取车辆照片中的车牌区域(基于纹理特征)

    一.算法需求 基于基于纹理特征提取车辆照片中的车牌区域 二.问题分析 在车辆照片中提取车牌区域,需要对图像进行系列变化,移除图像的非车牌区域,使车牌区域在图像中变得显著.目前分析发现,在车辆照片中,车 ...

  2. 利用MSER算法提取图像区域(车牌区域)的OpenCV代码~

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 我的博客中前面已经写了两种方法来实现车牌区域的提 ...

  3. OpenCV实战——使用MSER提取特征区域

    OpenCV实战--使用MSER提取特征区域 0. 前言 1. MSER 算法原理 2. 实现 MSER 算法 3. 完整代码 相关链接 0. 前言 在分水岭算法一节中,我们了解了如何通过创建分水岭将 ...

  4. 基于python+opencv的图像目标区域自动提取

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 一.提取纸张中的内容 一张照片中的感兴趣区域总是沿着x,y,z三个轴都有一定倾斜(如下图),要 ...

  5. 图像处理库(fbc_cv):源自OpenCV代码提取

    在实际项目中会经常用到一些基本的图像处理操作,而且经常拿OpenCV进行结果对比,因此这里从OpenCV中提取了一些代码组织成fbc_cv库.项目fbc_cv所有的代码已放到GitHub中,地址为   ...

  6. Opencv获取身份证号码区域

    记得应该是16年的时候,从一个公开课看到了关于OCR方面的内容,里面讲到了通过OpenCV对身份证号码区域的剪裁以及使用Tess-Two进行文字识别,实现了对身份证号码的识别功能. 断断续续看了点关于 ...

  7. opencv 手选roi区域_如何用opencv实现感兴趣区域ROI的选取

    OpenCV中感兴趣区域的选取与检测 感兴趣区域(Region of Interest, ROI)的选取,一般有两种情形:1)已知ROI在图像中的位置:2)ROI在图像中的位置未知. 1)第一种情形 ...

  8. OpenCV python 提取图像内的三色

    OpenCV python 提取图像内的三色 原图 [opencv.jpg] import cv2 import numpy as npdef main():# 1.导入图片img_src = cv2 ...

  9. OpenCV PCA提取对象的方向的实例(附完整代码)

    OpenCV PCA提取对象的方向的实例 OpenCV PCA提取对象的方向的实例 OpenCV PCA提取对象的方向的实例 #include "opencv2/core.hpp" ...

  10. python图片保存为txt文件_python + opencv实现提取png图像的像素信息并存储到txt文件中(附安装指导)...

    相关库安装指导: 这里我们需要 opencv_python,numpy,matplotlib库,另外我用的是python3.6.1版本. 一般库大家都是用pip install命令安装的,不过不知道为 ...

最新文章

  1. 世界上最大的黑客 Party,有关“DEFCON”的十个冷知识
  2. 【直播资料下载】Python第五讲——关于爬虫如何做js逆向的思路
  3. php实现设计模式之 适配器模式
  4. 2、内核的配置和移植
  5. matlab中结束脚本运行_疫情当前,生活向前 | MATLAB 一直 Online 等你
  6. oracle用户编辑文件中文乱码
  7. 自动驾驶感知-车道线系列(二)——Canny边缘检测
  8. 视频教程-uni-app实战仿微信app开发-Webapp
  9. 微服务系列:Nacos的搭建演武版(单机+集群+监控)
  10. 制作linux的u盘安装盘或live
  11. 手淘移动端适配的方案学习和相关思考
  12. Python 批量修改图片格式和尺寸
  13. SCSI错误定位:hostbyte和driverbyte
  14. MyCat笔记(九):书籍:分布式数据库架构及企业实践-基于Mycat中间件.pdf
  15. 对话西乔霍炬,什么塑造了今天的编程世界?
  16. 同步非同步阻塞非阻塞 总结与区别
  17. 微信内测新版本,「漂流瓶」这次真的要去流浪了
  18. 循环神经网络-LSTM进阶
  19. NetSuite 中国财务常用报表功能包
  20. c语言变量定义位置区别,C语言中变量定义的位置(C89和C99的区别)

热门文章

  1. OPENROWSET访问CSV格式文件
  2. WEB页面自打开的响应顺序
  3. Swift实现LRU缓存淘汰算法
  4. Spring MVC 实现文件的上传和下载
  5. Elasticsearch5.X Centos7安装过程
  6. 查找指定时间段内的文件
  7. sys.dm_db_wait_stats
  8. PHP问题 —— failed to open stream: HTTP request faile
  9. java 通过网络 ntp 获取网络时间
  10. 项目开发中遇到的问题,原因,解决思路