一、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。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/284662.html
微信扫一扫
支付宝扫一扫