第1关:图片基本操作

OpenCV 简介
OpenCV是一个开源的跨平台计算机视觉库。跨平台是指,它可以运行在Linux、Windows、Android和Mac OS等操作系统上。它实现了图像处理和计算机视觉方面的很多通用算法,具有轻量高效的特点。OpenCV提供了多种语言的编程接口,例如C、C++、Python。所以,我们先学习使用OpenCV做图像基本操作。
1.采集图片
原始的图片多数采用各种摄像头采集,再整理为图片数据集。
如果使用OpenCV采集,可以通过cv2.VideoCapture()获取摄像头并捕捉画面中的图片。函数声明为:
cv2.VideoCapture(摄像头来源)
其中,传入的参数,指定0时为默认计算机默认摄像头,指定1可以更换来源。
然后,获取捕获图像,函数为:
cap.read()
cap.read()返回一个布尔值(True/False)和一帧图像。
最后释放捕获对象,函数为:
cap.release()
示例如下:

# 引入OpenCV库
import cv2
# 调用摄像头进行拍照
cap = cv2.VideoCapture(0)
# 获取一帧图片
# 如果捕获成功,代码中ret值为真,img为捕获的图像。
ret, img = cap.read()
# 释放捕获对象
cap.release()

2.读取图片
通常我们使用采集完成的图片。在OpenCV中,使用cv2.imread()从文件中加载一张图片。
函数声明为:
cv2.imread(图片路径, 标记)
第一个参数为图片路径,图片应该在当前的工作路径,或在指定的绝对路径下。
第二个参数指定图片被读取的方式:
cv2.IMREAD_COLOR : 读入彩色图像,默认模式;
cv2.IMREAD_GRAYSCALE : 以灰度模式读入图像;
cv2.IMREAD_UNCHANGED : 加载图像包含alpha通道。
也可以,使用数字简约表示以上三种标记,分别为 1, 0或-1。
示例如下:

import cv2
# 加载一张位于当前目录下的`images/girl.jpg`的图片
image_path = "images/girl.jpg"
# 以灰度模式读取图片
img = cv2.imread(image_path,0)

3.展示图片
读取图片之后,可以将图片展示到窗口。使用cv2.imshow()在窗口展示图片。
函数声明为:
imshow(窗口名称, 图片对象)
第一个参数传入窗口的名字;
第二个参数传入需要展示的图片对象。
当窗口展示完之后,需要再调用cv2.destroyAllWindows()销毁所有的窗口。

示例如下:

import cv2
# 读取图片
image_path = "images/girl.jpg"
img = cv2.imread(image_path,1)
# 窗口展示图片
cv2.imshow('cute girl',img)
# 等待用户关闭图片窗口
cv2.waitKey(0)
# 销毁创建的所有窗口
cv2.destroyAllWindows()
运行上面的示例代码会呈现下面的效果:

4.保存图片
在完成图像的一系列操作之后,可以使用cv2.imwrite()将图片保存到本地。
函数声明为:
cv2.imwrite(图片路径, 图片对象)
同样的,
第一个参数为图片路径,图片应该在当前的工作路径,或在指定的绝对路径下;
第二个参数为将要保存的图片对象。
示例如下:

import cv2
# 读取图片
image_path = "images/girl.jpg"
img = cv2.imread(image_path,1)
# 保存图片为girl-copy.png
cv2.imwrite('images/girl-copy.png',img)

编程要求
请在右侧编辑器编写代码,完成如下要求:

导入openCV 库(cv2);
读取路径 step1/image/girl.jpg下的图片(图片读取模式三种任选一种都可以);
将读取到的图片保存到路径 step1/out/girl-new.jpg下。

示例代码如下:

#********** Begin **********#
# 导入OpenCV库
import cv2
#********** End **********#
# 原始图片路径
image_path = 'step1/image/girl.jpg'
# 保存图片路径
save_image_path = 'step1/out/girl-new.jpg'
#********** Begin **********#
# 读取图片并保存图片
new_img = cv2.imread(image_path)
cv2.imwrite(save_image_path,new_img)
#********** End **********#

在这里插入图片描述

第2关:色彩空间及其转换

编程要求
请在右侧编辑器编写代码,完成如下要求:

将图片的色彩空间转换为灰度空间;
将处理后的图片保存到路径step2/out/girl-gray.jpg下。

示例代码如下:

import cv2
# 加载图片
filename = "step2/image/girl.jpg"
img = cv2.imread(filename)
#********** Begin **********#
# 将图片的色彩空间由BGR转换GRAY
new_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#********** End **********#
save_image_path = "step2/out/girl-gray.jpg"
#********** Begin **********#
# 保存图片
cv2.imwrite(save_image_path,new_img)
#********** End **********#

在这里插入图片描述

第3关:基于Harr特征的人脸检测分类器

编程要求
请在右侧编辑器补充代码,调用 Harr 完成人脸识别,具体任务如下:

读取图片;
转化图片为灰度图片;
声明人脸检测器;
调用人脸检测函数,scaleFactor参数设定为1.3, minNeighbors参数设定为5。

示例代码如下:

import numpy as np
import cv2
#********** Begin **********#
# 读取图片
image_path = 'step3/image/face.jpg'
img = cv2.imread(image_path)
# 转换为灰度图片
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测器
modle_path = 'sample/data/haarcascades/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(modle_path)
# 识别人脸
faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
#********** End **********#
print(faces)

在这里插入图片描述

第4关:绘制人脸与人眼区域

编程要求
请在右侧编辑器补充代码,调用 Harr 完成人脸识别,具体任务如下:

绘制人脸区域;
调用眼睛检测模型,识别眼睛区域;
绘制眼睛区域。

示例代码如下:

import cv2
# 读取图片
img = cv2.imread('step4/image/girl.jpg')
# 转换为灰阶图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测器
face_cascade = cv2.CascadeClassifier('sample/data/haarcascades/haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 绘制人脸区域
for (x,y,w,h) in faces:
    print(x,y,w,h)
    #********** Begin **********#
    # 在人脸区域添加矩形框
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
    face_gray = gray[y:y+h, x:x+w]
    face_area = img[y:y+h, x:x+w]
    #********** End **********#
    #绘制眼睛区域
    path_of_haarcascade_eye = "sample/data/haarcascades/haarcascade_eye.xml"
    eye_cascade = cv2.CascadeClassifier(path_of_haarcascade_eye)
    eyes = eye_cascade.detectMultiScale(face_gray)
    #********** Begin **********# 
    for (ex,ey,ew,eh) in eyes:
        print(ex,ey,ew,eh)
        # 在眼睛区域添加矩形框
        cv2.rectangle(face_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
    #********** End **********#
# 保存图片
save_image_path = "step4/out/girl-drawing.jpg"
cv2.imwrite(save_image_path,img)

在这里插入图片描述


更多推荐