OpenCV

发布于:2025-03-31 ⋅ 阅读:(24) ⋅ 点赞:(0)

        

目录

1. 基本概念

2. Python 接口(cv2)

3. 安装与配置

 4.常用API(python)

1. 图像读取与显示

2. 基本图像操作

3. 图像绘制

4. 图像滤波

5. 形态学操作

6. 视频处理

7. 人脸检测

8. 机器学习

5. 应用领域

6. 简单示例

总结




        OpenCV(全称 Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,最初由英特尔启动,现在由全球开发者共同维护。它用 C/C++ 编写,提供了丰富的图像处理、视频分析、特征检测、目标识别等算法,同时还提供了 Python、Java 等多种语言的接口,使得在 Python 中调用这些强大的功能变得非常方便。


1. 基本概念

  • 图像读取与处理
    OpenCV 能够轻松读取、显示、保存图像以及对图像进行各种处理操作,如图像滤波、边缘检测、颜色空间转换等。
    示例代码:

    import cv2
    
    # 读取图像(默认以彩色读取)
    img = cv2.imread('image.jpg')
    
    # 显示图像
    cv2.imshow('Image', img)
    cv2.waitKey(0)  # 等待键盘输入
    cv2.destroyAllWindows()
    
  • 视频处理
    除了静态图像,OpenCV 也支持视频的捕获与处理,你可以使用它打开摄像头,进行实时人脸检测或目标跟踪。

  • 丰富的算法支持
    OpenCV 集成了超过 2500 个优化算法,覆盖了图像滤波、边缘检测、特征提取、机器学习、深度学习(通过 dnn 模块)等领域。


2. Python 接口(cv2)

        在 Python 中使用 OpenCV 时,通常导入的包是 cv2。这个包封装了 OpenCV 的核心功能,配合 NumPy 数组进行图像数据处理。
例如,读取图像后,图像数据其实就是一个多维数组,你可以直接用 NumPy 的操作对其进行处理:

import cv2
import numpy as np

img = cv2.imread('image.jpg')
print("图像尺寸:", img.shape)  # 输出例如 (高, 宽, 通道数)


3. 安装与配置

安装 OpenCV 非常简单,有两种常用方法:

  • pip 安装
    在命令行中运行:

    pip install opencv-python
    

    如果需要更多扩展功能(如额外的模块),可以安装:

    pip install opencv-contrib-python
    

    (也可以通过国内镜像源加速下载:pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
    参考了【菜鸟教程】对 Python 版 OpenCV 的安装说明​

    runoob.com

  • Anaconda 安装
    如果你使用 Anaconda 管理 Python 环境,可以用以下命令:

    conda install -c conda-forge opencv
    




 4.常用API(python)

        在 Python 的 OpenCV (cv2) 库中,有许多常用的 API,涵盖了图像处理、视频处理、特征检测、机器学习等多个方面。以下是一些最常用的 API 及其功能介绍:        

1. 图像读取与显示

API 说明
cv2.imread(filename, flags) 读取图像,flags=0 读取灰度图,flags=1 读取彩色图(默认)。
cv2.imshow(winname, mat) 显示图像。
cv2.waitKey(delay) 等待键盘输入,delay=0 表示无限等待。
cv2.destroyAllWindows() 关闭所有 OpenCV 窗口。
cv2.imwrite(filename, img) 保存图像。

示例:

import cv2

img = cv2.imread('image.jpg')  # 读取图像
cv2.imshow('Image', img)  # 显示图像
cv2.waitKey(0)  # 等待按键
cv2.destroyAllWindows()  # 关闭窗口

2. 基本图像操作

API 说明
img.shape 获取图像尺寸 (高度, 宽度, 通道数)
cv2.cvtColor(img, flag) 颜色空间转换,例如 cv2.COLOR_BGR2GRAY(彩色转灰度)。
cv2.resize(img, dsize, fx, fy) 调整图像大小。
cv2.flip(img, flipCode) 翻转图像,flipCode=0 垂直翻转,flipCode=1 水平翻转,flipCode=-1 水平+垂直翻转。
cv2.rotate(img, rotateCode) 旋转图像,rotateCode=cv2.ROTATE_90_CLOCKWISE 顺时针旋转90°。
cv2.addWeighted(img1, alpha, img2, beta, gamma) 图像加权融合。

示例: 

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转换为灰度图
resized = cv2.resize(img, (300, 300))  # 调整大小
flipped = cv2.flip(img, 1)  # 水平翻转
cv2.imshow('Flipped', flipped)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 图像绘制

API 说明
cv2.line(img, pt1, pt2, color, thickness) 画直线。
cv2.rectangle(img, pt1, pt2, color, thickness) 画矩形。
cv2.circle(img, center, radius, color, thickness) 画圆形。
cv2.putText(img, text, org, font, fontScale, color, thickness) 绘制文本。

示例:

cv2.line(img, (50, 50), (200, 50), (0, 255, 0), 2)  # 画直线
cv2.rectangle(img, (50, 100), (200, 200), (255, 0, 0), 2)  # 画矩形
cv2.circle(img, (150, 300), 50, (0, 0, 255), -1)  # 画实心圆
cv2.putText(img, 'Hello OpenCV', (50, 400), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2)
cv2.imshow('Drawing', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


4. 图像滤波

API 说明
cv2.GaussianBlur(img, ksize, sigmaX) 高斯模糊。
cv2.medianBlur(img, ksize) 中值模糊。
cv2.bilateralFilter(img, d, sigmaColor, sigmaSpace) 双边滤波。
cv2.Canny(img, threshold1, threshold2) Canny 边缘检测。

示例:

blurred = cv2.GaussianBlur(img, (5, 5), 0)  # 高斯模糊
edges = cv2.Canny(img, 100, 200)  # Canny 边缘检测
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()


5. 形态学操作

API 说明
cv2.erode(img, kernel, iterations) 腐蚀(去掉小亮点)。
cv2.dilate(img, kernel, iterations) 膨胀(增强白色区域)。
cv2.morphologyEx(img, op, kernel) 形态学变换,如 cv2.MORPH_OPEN(开运算),cv2.MORPH_CLOSE(闭运算)。

示例:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
dilated = cv2.dilate(img, kernel, iterations=1)
cv2.imshow('Dilated', dilated)
cv2.waitKey(0)
cv2.destroyAllWindows()


6. 视频处理

API 说明
cv2.VideoCapture(0) 打开摄像头(0 代表默认摄像头)。
cap.read() 读取一帧视频。
cv2.VideoWriter(filename, fourcc, fps, frameSize) 保存视频。

示例(打开摄像头并显示):

cap = cv2.VideoCapture(0)  # 打开摄像头

while True:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('Video', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()


7. 人脸检测

API 说明
cv2.CascadeClassifier(xml_file) 载入 Haar 级联分类器模型。
cascade.detectMultiScale(img, scaleFactor, minNeighbors) 进行人脸检测。

示例:

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

cv2.imshow('Face Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


8. 机器学习

API 说明
cv2.ml.SVM_create() 创建支持向量机(SVM)模型。
cv2.ml.KNearest_create() 创建 KNN 模型。
cv2.dnn.readNetFromONNX(model) 读取 ONNX 预训练模型。



5. 应用领域

由于 OpenCV 提供了丰富的图像处理工具,它被广泛应用于:

  • 人脸检测与识别:利用预训练模型检测人脸。

  • 目标跟踪:在视频中跟踪移动目标。

  • 图像分割:提取感兴趣区域。

  • 增强现实与 3D 重建:结合多视角图像生成三维模型。

  • 机器学习和深度学习:借助 OpenCV 的 dnn 模块加载预训练的深度学习模型,进行图像分类、物体检测等任务。


6. 简单示例

下面的示例代码展示了如何使用 OpenCV 在 Python 中读取图像并进行简单的边缘检测:

import cv2

# 读取图像并转换为灰度图
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 使用 Canny 算法进行边缘检测
edges = cv2.Canny(gray, 100, 200)

# 显示原图和边缘检测结果
cv2.imshow('Original', img)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()


总结

        掌握 OpenCV 不仅可以帮助理解图像处理的基本原理,还能为以后在计算机视觉、人工智能等领域的深入研究打下坚实基础。可以先从简单的图像读取和显示开始,逐步探索边缘检测、人脸识别等更复杂的应用。
可以查阅 OpenCV 官方文档或【OpenCV中文网站】​

zh.wikipedia.org

,这些都是非常有用的参考资料。

希望这份介绍能帮助大家入门 Python 中的 OpenCV,祝大家学习愉快!