一、OpenCV介绍
OpenCV是一款跨平台的计算机视觉库,它提供了各种各样的函数,用于图像、视频处理和机器学习。OpenCV最初是由英特尔公司开发的,以C++语言编写而成,但现已得到支持多种编程语言(如Python、Java等)的扩展。
OpenCV生态系统从2.x版本开始就已经被广泛应用。如今,它常用于人脸检测、图像分割、图像跟踪等方面,同时也是许多研究人员和工程师的首选。
下面给出一个简单的例子,展示如何使用OpenCV读取并显示图像。这是OpenCV的入门的第一步——加载图像。
import cv2 as cv img = cv.imread('example.jpg', 1) cv.imshow('image', img) cv.waitKey(0) cv.destroyAllWindows()
代码中,cv2.imread函数可以读取一张图像,并以numpy数组的形式存储。其中,1表示读取为彩色图像,0表示读取为灰度图像;'example.jpg'表示要读取的图像路径。
cv.imshow函数可用于显示图像,第一个参数指定窗口名字,第二个参数指定要显示的图像。cv.waitKey函数则等待特定时间(以毫秒计)来查看是否有任何键盘事件,如果按下任何按键,则返回键的ASCII值,否则返回-1。cv.destroyAllWindows函数清除所有高GUI窗口。
二、基本图像处理
OpenCV提供的基础函数使得图像处理变得更加简单。下面我们看看一些最常用的图像处理函数。
1. 图像调整
import cv2 as cv img = cv.imread('example.jpg', 1) # 缩小一倍 img_resized = cv.resize(img,(int(img.shape[1]/2), int(img.shape[0]/2))) cv.imshow('resized', img_resized) # 水平翻转 img_flipped = cv.flip(img, 1) cv.imshow('flipped', img_flipped) # 调整亮度 M = np.ones(img.shape, dtype='uint8') * 75 img_bright = cv.add(img, M) cv.imshow('bright', img_bright) cv.waitKey(0) cv.destroyAllWindows()
代码中,cv.resize函数可以缩小或放大图像,第一个参数指定要改变的图像,第二个参数为新图片的width和height。cv.flip函数可以水平、垂直或水平垂直翻转图片,第一个参数是要翻转的图像,第二个参数是指定翻转类型。
图像的对比度和亮度可以用add函数来调整,M为输入图像,表示要强制增加的每个像素的值。OpenCV允许使用numpy来操作每个像素。
2. 图像滤波
import cv2 as cv import numpy as np img = cv.imread('example.jpg', 1) # 高斯滤波 img_blur = cv.GaussianBlur(img, (5,5), 0) cv.imshow('blur', img_blur) # 中值滤波 img_median = cv.medianBlur(img, 5) cv.imshow('median', img_median) # 边缘检测 img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) img_edges = cv.Canny(img_gray, 50, 150) cv.imshow('edges', img_edges) cv.waitKey(0) cv.destroyAllWindows()
代码中,cv.GaussianBlur函数实现高斯滤波,第一个参数为输入图像,第二个参数是一个元组ksize,表示内核大小。第三个参数是标准差,为0时表示自动计算。cv.medianBlur函数实现中值滤波,第一个参数为输入图像,第二个参数为内核大小。cv.Canny函数用于自动的边缘检测策略,第一个参数是输入图像,后两个参数的阈值大小和比率。
三、实际应用
下面是一个实际应用的例子:简单的人脸检测。
首先需要下载并导入计算机视觉库Dlib和OpenCV。
!pip install dlib
以下是人脸检测的代码示例
import cv2 import dlib detector = dlib.get_frontal_face_detector() # 加载图片 img = cv2.imread('example.jpg', 1) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 人脸检测 faces = detector(img_rgb) # 框出人脸 for face in faces: x1, y1 = face.left(), face.top() x2, y2 = face.right(), face.bottom() cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 10) # 显示结果 cv2.imshow('result', img) cv2.waitKey(0) cv2.destroyAllWindows()
代码中,首先使用dlib.get_frontal_face_detector()函数创建一个默认的人脸检测器。然后加载一张图片,并将其转换为RGB格式。接着使用detector函数检测人脸,结果将存储在一个list中。最后,使用cv2.rectangle函数将人脸框起来。
总结
本文通过介绍OpenCV基本功能以及实际应用,对其功能进行了详细的阐述,希望可以帮助读者更好地了解和使用OpenCV。