一、 OpenCV简介1.1 什么是OpenCV? OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由一系列的C函数和少量C++类构成,同时提供Python、Java和MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
代码语言:javascript复制# 导入OpenCV库
import cv2
# 打印OpenCV版本
print(cv2.__version__)输出:
代码语言:javascript复制4.5.2OpenCV的设计目标是提供一套简单而且可扩展的计算机视觉库,使得它能够方便地在实际的应用、研究、开发中被使用。
1.2 OpenCV的历史与发展OpenCV的起源可以追溯到1999年,当时在英特尔公司由一群热情的研发工程师开始进行开发。2000年,OpenCV以开源的方式发布,旨在推动计算机视觉的发展并帮助更多人应用这一技术。自此之后,OpenCV已经不断发展,增加了大量新的功能,并已成为全球最流行的计算机视觉库之一。
1.3 OpenCV的应用领域OpenCV具有极广的应用领域,它包括但不限于:
人脸识别和物体识别:这是OpenCV的一项重要功能,应用在许多领域,如安全监控、交互设计等。图像和视频分析:如图像增强、图像分割、视频跟踪等。图像合成和3D重建:在图像处理和计算机视觉领域,OpenCV可以用于创建AR或VR效果,生成3D模型等。机器学习:OpenCV内置了大量的机器学习算法,可以用于图像分类、聚类等任务。深度学习:OpenCV中的dnn模块提供了一系列深度学习模型的接口,用户可以加载预训练模型进行图像识别、目标检测等任务。代码语言:javascript复制# 例如,以下代码展示了如何使用OpenCV进行图像读取和显示
import cv2
# 读取一张图像
img = cv2.imread('image.jpg')
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()综上,OpenCV凭借其强大的功能、开源的优势以及广泛的应用领域,成为了学者和工业界的重要工具。
二、OpenCV在不用平台的安装2.1 OpenCV的安装与配置OpenCV的安装方式根据不同的操作系统和使用环境有所不同。以下我们将分别介绍在Windows、Linux和Mac OS下的安装方式,以及如何配置Python环境使用OpenCV。
2.2 OpenCV在Windows系统下的安装在Windows系统下,推荐使用Python的包管理工具pip来安装OpenCV。你可以在命令行中运行以下命令来安装:
代码语言:javascript复制pip install opencv-python如果你需要使用到OpenCV的额外模块(如xfeatures2d等),可以安装opencv-contrib-python包:
代码语言:javascript复制pip install opencv-contrib-python2.3 OpenCV在Linux系统下的安装在Linux系统下,我们同样可以使用pip来安装OpenCV。打开终端,运行以下命令:
代码语言:javascript复制pip install opencv-python同样,如果你需要使用到OpenCV的额外模块,可以安装opencv-contrib-python包:
代码语言:javascript复制pip install opencv-contrib-python2.4 OpenCV在Mac OS系统下的安装在Mac OS下,我们同样可以使用pip来安装OpenCV。打开终端,运行以下命令:
代码语言:javascript复制pip install opencv-python如果你需要使用到OpenCV的额外模块,可以安装opencv-contrib-python包:
代码语言:javascript复制pip install opencv-contrib-python2.5 配置Python环境使用OpenCV安装完成OpenCV后,我们可以在Python环境中导入cv2模块来使用OpenCV的功能。你可以创建一个新的Python脚本,然后在其中输入以下代码来测试OpenCV是否安装成功:
代码语言:javascript复制import cv2
# 打印OpenCV版本
print(cv2.__version__)如果输出了你所安装的OpenCV版本号,那么恭喜你,你已经成功安装并配置好了OpenCV!
总的来说,无论是在Windows、Linux还是Mac OS系统下,安装和使用OpenCV都是相对简单的。只需要几个简单的命令,就可以开始你的OpenCV之旅了。
三、OpenCV基础使用在此部分,我们将介绍一些OpenCV的基础知识,包括图像的载入、显示和保存,以及图像的基本操作和色彩空间的转换。
3.1 图像的载入、显示和保存在OpenCV中,我们通常使用imread()函数来载入一张图像,使用imshow()函数来显示一张图像,使用imwrite()函数来保存一张图像。
以下是一个示例:
代码语言:javascript复制import cv2
# 载入一张图像
img = cv2.imread('image.jpg')
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存图像
cv2.imwrite('new_image.jpg', img)3.2 图像的基础操作OpenCV提供了一系列的函数来进行图像的基础操作,包括但不限于:
获取和修改像素值获取图像的基本属性(如大小、通道数、像素数等)设置图像的ROI(Region of Interest)拆分和合并图像通道代码语言:javascript复制# 获取和修改像素值
px = img[100,100]
print(px)
# 修改像素值
img[100,100] = [255,255,255]
print(img[100,100])
# 获取图像属性
print(img.shape)
print(img.size)
print(img.dtype)
# 设置ROI
roi = img[100:200, 100:200]
# 拆分和合并图像通道
b,g,r = cv2.split(img)
img = cv2.merge((b,g,r))四、图像色彩空间如何转换OpenCV提供了200+种颜色空间的转换方法,但是我们最常用的还是RGB<->Gray和RGB<->HSV的转换。
我们可以使用cv2.cvtColor()函数来进行颜色空间的转换,如下例:
代码语言:javascript复制# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 转换为HSV图像
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)这是OpenCV基础操作的简单介绍,这些操作是我们在进行更高级的图像处理之前需要掌握的基础知识。
4.1 图像处理与计算机视觉基础在计算机视觉中,图像处理是一个关键的环节,它包括图像阈值化、边缘检测、图像滤波、图像形态学操作和图像二值化等操作。下面我们将一一介绍。
4.2 图像阈值化图像阈值化是将图像从灰度转换为二值化图像的过程,OpenCV提供了cv2.threshold()函数来进行这项操作。
代码语言:javascript复制import cv2
import numpy as np
# 载入图像并转为灰度图
img = cv2.imread('image.jpg',0)
# 阈值化处理
ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
# 显示处理结果
cv2.imshow('threshold',thresh1)
cv2.waitKey(0)
cv2.destroyAllWindows()4.3 边缘检测边缘检测是计算机视觉中的常见任务,它可以用来识别图像中的物体。Canny边缘检测是一种常用的边缘检测算法,OpenCV中可以使用cv2.Canny()函数来进行Canny边缘检测。
代码语言:javascript复制import cv2
import numpy as np
# 载入图像
img = cv2.imread('image.jpg',0)
# 进行Canny边缘检测
edges = cv2.Canny(img,100,200)
# 显示处理结果
cv2.imshow('edges',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()4.4 图像滤波图像滤波是计算机视觉中常见的图像预处理方法,OpenCV提供了各种滤波函数,如cv2.filter2D()、cv2.blur()、cv2.GaussianBlur()等。
代码语言:javascript复制import cv2
import numpy as np
# 载入图像
img = cv2.imread('image.jpg')
# 使用高斯滤波进行图像平滑处理
blur = cv2.GaussianBlur(img,(5,5),0)
# 显示处理结果
cv2.imshow('blur',blur)
cv2.waitKey(0)
cv2.destroyAllWindows()4.5 图像形态学操作形态学操作是基于图像形状的一系列操作,包括腐蚀、膨胀、开运算和闭运算等。OpenCV提供了cv2.erode()、cv2.dilate()、cv2.morphologyEx()等函数来进行形态学操作。
代码语言:javascript复制import cv2
import numpy as np
# 载入图像
img = cv2.imread('image.jpg',0)
# 创建一个5x5的结构元素
kernel = np.ones((5,5),np.uint8)
# 进行膨胀操作
dilation = cv2.dilate(img,kernel,iterations = 1)
# 显示处理结果
cv2.imshow('dilation',dilation)
cv2.waitKey(0)
cv2.destroyAllWindows()