基于opencv的摄像头脸部识别抓取及格式储存(python)

刚接触opencv,参照opencv的sample例子做了一个视频头像抓取的小代码,顺便一起学习着用,先上视频抓取及存储代码:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# -*- coding: cp936 -*-

import cv2

capture=cv2.VideoCapture(0)

#将capture保存为motion-jpeg,cv_fourcc为保存格式

size = (int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),

        int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))

#cv_fourcc值要设置对,不然无法写入,而且不报错,坑

video=cv2.VideoWriter("VideoTest.avi", cv2.cv.CV_FOURCC(‘I‘,‘4‘,‘2‘,‘0‘), 30, size)

#isopened可以查看摄像头是否开启

print capture.isOpened()

num=0

#要不断读取image需要设置一个循环

while True:

    ret,img=capture.read()

    #视频中的图片一张张写入

    video.write(img)

    cv2.imshow(‘Video‘,img)

    key=cv2.waitKey(1)#里面数字为delay时间,如果大于0为刷新时间,

    #超过指定时间则返回-1,等于0没有返回值,但也可以读取键盘数值,

    cv2.imwrite(‘%s.jpg‘%(str(num)),img)

    num=num+1

    if key==ord(‘q‘):#ord为键盘输入对应的整数,

        break

video.release()

#如果不用release方法的话无法储存,要等结束程序再等摄像头关了才能显示保持成功

capture.release()#把摄像头也顺便关了

cv2.destroyAllWindows()

opencv视频抓取好简单,主要用videowriter就可以了,主要要注意的是opencv中的抓取是放在内存中的,所以需要一个释放命令,不然就只能等到程序关闭后进行垃圾回收时才能释放了。视频抓取就不上图了。

然后是脸部识别,opencv自带了很多特征库有脸部,眼睛的还有很多,原理都一样,只是眼睛的库识别率视乎并不高,直接上代码:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#coding=utf-8

import cv2

import cv2.cv as cv

img = cv2.imread("5.jpg")

def detect(img, cascade):

    ‘‘‘detectMultiScale函数中smallImg表示的是要检测的输入图像为smallImg,

faces表示检测到的人脸目标序列,1.3表示每次图像尺寸减小的比例为1.3,

 4表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大小都可以检测到人脸),

 CV_HAAR_SCALE_IMAGE表示不是缩放分类器来检测,而是缩放图像,Size(20, 20)为目标的最小最大尺寸‘‘‘

    rects = cascade.detectMultiScale(img, scaleFactor=1.3,

                                     minNeighbors=5, minSize=(3030), flags = cv.CV_HAAR_SCALE_IMAGE)

    if len(rects) == 0:

        return []

    rects[:,2:] += rects[:,:2]

    print rects

    return rects

#在img上绘制矩形

def draw_rects(img, rects, color):

    for x1, y1, x2, y2 in rects:

        cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)

#转换为灰度图

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#直方图均衡处理

gray = cv2.equalizeHist(gray)

#脸部特征分类地址,里面还有其他

cascade_fn = ‘data/haarcascades/haarcascade_frontalface_alt.xml‘

#读取分类器,CascadeClassifier下面有一个detectMultiScale方法来得到矩形

cascade = cv2.CascadeClassifier(cascade_fn)

#通过分类器得到rects

rects = detect(gray, cascade)

#vis为img副本

vis = img.copy()

#画矩形

draw_rects(vis, rects, (02550))

cv2.imshow(‘facedetect‘, vis)

cv2.waitKey(0)

cv2.destroyAllWindows()

直接上效果图和原图对比:

http://my.oschina.net/Kanonpy/

时间: 2024-11-09 07:26:13

基于opencv的摄像头脸部识别抓取及格式储存(python)的相关文章

基于opencv网络摄像头在ubuntu下的视频获取

 基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参考http://blog.csdn.net/xiabodan/article/details/23547847 3  测试代码 编译 g++ cameraCaptrue.cpp -o test `pkg-config --libs --cflags opencv` cameraCaptrue.cpp

基于opencv在摄像头ubuntu根据视频获取

 基于opencv在摄像头ubuntu根据视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译执行步骤 安装编译opencv-2.3  參考http://blog.csdn.net/xiabodan/article/details/23547847 提前下载OPENCV源代码包 官方:http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/ 我的:http://dow

多媒体编程——ios摄像头图像抓取工具类

工具类提供预览图像画面,自动处理旋转,并且以主动方式抓取图像(这样帧率可以无限大) 系统的接口多是异步接收图像,像我这种强迫症怎么受得了,必须吧被动接收图像的方式改成主动抓取. 头文件 #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> //这些比例都是4:3的比例. typedef enum TKVideoFrameSize { tkVideoFrame480x360 = 480 <

自动抓取163新闻的Python爬虫源码

Python爬虫的学习,自动抓取163新闻的Python爬虫源码,这是一个用Python语言编写的,自动抓取网易新闻的python爬虫实现方法一文. Python爬虫的抓取思路是:(1)通过分析目标新闻网址 ,分析其中以News.xxx.com 开头的链接(2)获取每一个链接的内容,并做整理合并到事前准备好的.txt 文本中,以便查看各新闻.但是需要注意的是:由于今天的测试对象,网易新闻的格式不是非常统一,所有会有部分漏掉的情况,还能大家见谅.也希望有能力的朋友们帮着改进一下. 自动抓取163新

30分钟编写一个抓取 Unsplash 图片的 Python爬虫

我一直想用 Python and Selenium 创建一个网页爬虫,但从来没有实现它. 几天前, 我决定尝试一下,这听起来可能是挺复杂的, 然而编写代码从 Unsplash 抓取一些美丽的图片还是挺容易的. PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此我整理啦从基础的python脚本到web开发.爬虫.django.数据挖掘等[PDF等]需要的可以进Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新

抓取百度贴吧python小爬虫 (2015最新版)

网上好多抓取贴吧的小爬虫都失效了,原因是百度贴吧的编码格式变了,或者是html代码变了,像这种简单的读取源代码的爬虫,只要网页源代码改变之后就得重新修改. 请诸位大牛指点. # -*- coding:utf8 -*- """ 程序就是读取网页的源代码,如果想获取相应的内容就找到其特定的格式,再利用正则表达式来获取. """ import string import urllib2 import re class html_Tool: #为了提取文

抓取京东商品相关Python脚本

1.http://python.org/download 先去官网根据自己的系统安装Python 2.我的Python2.7版本 3.确认环境都配置好,PIP下载需要的包(可以看脚本里面需要哪些例如:from selenium import webdriver),新建一个test.csv与运行的Python脚本目录同级(查询抓取数据后会保存到文件里面) 4.直接运行我的Python脚本输入查询条件品牌+型号+类型 例子:惠普 7110 打印机 5.http://pan.baidu.com/s/1

基于opencv的摄像头的标定

四个坐标系分别为:世界坐标系(Ow),摄像机坐标系(Oc),图像物理坐标系(O1,单位mm),图像像素坐标系(O,位于视野平面的左上角,单位pix). 空间某点P到其像点p的坐标转换过程主要是通过这四套坐标系的三次转换实现的,首先将世界坐标系进行平移和转换得到摄像机坐标系,然后根据三角几何变换得到图像物理坐标系,最后根据像素和公制单位的比率得到图像像素坐标系.(实际的应用过程是这个的逆过程,即由像素长度获知实际的长度) OpenCV中使用的求解焦距和成像原点的算法是基于张正友的方法( pdf )

基于OpenCV读取摄像头进行人脸检测和人脸识别

前段时间使用OpenCV的库函数实现了人脸检测和人脸识别,笔者的实验环境为VS2010+OpenCV2.4.4,opencv的环境配置网上有很多,不再赘述.检测的代码网上很多,记不清楚从哪儿copy的了,识别的代码是从OpenCV官网上找到的:http://docs.opencv.org/trunk/modules/contrib/doc/facerec/facerec_api.html 需要注意的是,opencv的FaceRecogizer目前有三个类实现了它,特征脸和fisherface方法