1.说明:windows7 64位 + python3.7 + idea2018社区版
2.首先是安装opencv,按照网上的说法都试了下,总结一下方法:
使用pip下载,在cmd中 输入

pip install opencv-python   
pip install numpy

安装numpy和opencv,如图cv是3.4.3版本,numpy是1.15.4版本,

然后我还下载了opencv-contrib-python,这个是扩展包,也用pip就能下载。

pythonopencv离线安装ubuntu python3.7安装opencv_haarcascade


然后去看idea,然后可能会发现imread上提示:Cannot find reference ‘imread’ in ‘init.py’ | cv2

这边你点击cv2看他的__init__文件能够看出他其实用的是cv2.cv2模块,所以这个提示没问题,能够运行(强迫症卡在这一步好久),网上看到的说法是python3版本高的问题(不确定)

import cv2
img = cv2.imread(image_path)

pythonopencv离线安装ubuntu python3.7安装opencv_python_02


真正的代码在这:

pythonopencv离线安装ubuntu python3.7安装opencv_python_03


3. 人脸识别

这边其实很简单,有现成的轮子:haar 人脸特征分类器

直接搜一下下载haarcascades

然后核心代码:

def detect_faces(image_path):
    result = []
    img = cv2.imread(image_path)  # ndarray
    # eye_cascade = cv2.CascadeClassifier("E:\py-file\py-pic\cvdata\haarcascades\haarcascade_eye_tree_eyeglasses.xml")
    face_cascade = cv2.CascadeClassifier("E:\py-file\py-pic\cvdata\haarcascades\haarcascade_frontalface_alt.xml")
    if img.ndim == 3:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 色彩空间的转换 BGR 2 GRAY
    else:
        gray = img  # 如果img维度为3,说明不是灰度图,先转化为灰度图gray,如果为2,原图就是灰度图
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=2, minSize=(30, 30),
                                          flags=cv2.CASCADE_SCALE_IMAGE)
    for (x, y, width, height) in faces:
        result.append((x, y, x + width, y + height))
    return result


def draw_faces(image_path, new_path):
    faces = detect_faces(image_path)
    print("发现%d个" % len(faces))
    if faces:
        img = Image.open(image_path)
        draw_instance = ImageDraw.Draw(img)
        for (x1, y1, x2, y2) in faces:
            draw_instance.rectangle((x1, y1, x2, y2), outline=(255, 0, 0))  # 矩形框,线宽不能改,fill表示填充内部
        img.show()
        # img.save(new_path)

faces就是所有人脸的位置(x,y,x+h,y+w),需要注意的是CascadeClassifier后面的路径需要是haarcascades完整的路径,frontalface_default.xml就是已经训练好的分类器,不过实测时候发现检测率不是很高,可能是图片的问题,人脸要大且清晰且正脸才能检测到。当然还有其他分类器可以使用:frontalface_alt和alt2检测率高一些。

pythonopencv离线安装ubuntu python3.7安装opencv_python3.7_04

---------------2018-12-07
1.更正一下,应该是人脸检测,人脸识别需要训练一个识别器然后使用
2.提供完整代码,detect_faces函数用于检测,返回人脸位置的列表,draw_faces用于画出位置(矩形框)
对于detectMultiScale的参数:

image:输入图像 
	scaleFactor:这个是每次缩小图像的比例,一般为1.1
	minNeighbors:匹配成功所需要的周围矩形框的数目,比如人脸特征,周围要最少识别三次才能确认是人脸。 
	flags:可以取如下这些值: 
		CASCADE_DO_CANNY_PRUNING=1, 利用canny边缘检测来排除一些边缘很少或者很多的图像区域 					
		CASCADE_SCALE_IMAGE=2, 正常比例检测 
		CASCADE_FIND_BIGGEST_OBJECT=4, 只检测最大的物体 
		CASCADE_DO_ROUGH_SEARCH=8 粗略的检测 
	minSize和maxSize:匹配物体的大小范围