当前位置: 首页 > news >正文

OpenCV

        

目录

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,祝大家学习愉快!        

http://www.dtcms.com/a/108387.html

相关文章:

  • 系统与网络安全------Windows系统安全(5)
  • Maya软件中的约束基础:提高角色动画制作效率的关键技术
  • 【解决】Edge浏览器硬件加速问题:无法滚动与卡顿的应对方法
  • Lumerical ------ Edge coupler design
  • Test——BUG篇
  • 掌握 Git 的艺术:Rebase 和 Merge 的使用技巧
  • MySQL 中 LOCK TABLES(手动锁表) 语句的详细说明,包括语法、使用场景、示例代码及注意事项
  • c加加学习之day02
  • ubuntu制做vsftpd的docker镜像
  • git总是链接不成功
  • Excel处理控件Spire.XLS系列教程:C# 打印 Excel 文档
  • 【算法】双指针
  • GIT ---- 解决【fatal: Authentication failed for】
  • 【案例89】达梦数据库优化器参数导致的SQL执行错误
  • 在Ubuntu20.04开发Dify插件教程,部署Dify插件脚手架
  • 深度学习 Deep Learning 第15章 表示学习
  • 针对 MySQL 数据库的详细说明,分类列出临时资源(临时表、游标、未提交事务、会话变量、预编译语句)的创建、清理方式及未清理后果,并以表格总结
  • [CH32] RISC-V汇编指令解释
  • linux下springboot项目守护进程编写
  • arm64平台下linux访问寄存器
  • Python----机器学习(线性回归:前向传播和损失函数)
  • 【C++基础知识】 C 预处理器中的 #line 指令详解
  • RabbitMQ应用2
  • Linux系统之SFTP-搭建SFTP服务器
  • ui-tars和omni-parser使用
  • JavaScript 模块化详解( CommonJS、AMD、CMD、ES6模块化)
  • 网络安全-等级保护(等保) 1-0 等级保护制度公安部前期发文总结
  • 蓝桥杯 web 表格数据转化(组件挂载、模板字符串)
  • 【硬件视界9】网络硬件入门:从网卡到路由器
  • C# 扩展方法