1.1 OpenCV随手简记(一)

OpenCV学习篇

OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉库,它提供了大量的算法和函数,用于图像处理、计算机视觉和机器学习等领域。

1. OpenCV 简介

1.1 OpenCV 的起源和发展

OpenCV 项目始于 1999 年,由 Intel 公司发起,旨在为计算机视觉研究人员和开发者提供一个开源的库。经过多年的发展,OpenCV 已经成为最流行的计算机视觉库之一,被广泛应用于学术研究和工业应用中。

1.2 OpenCV 的特点和优势

  • 开源免费:OpenCV 是开源的,可以免费使用和修改。
  • 跨平台:OpenCV 支持多种操作系统,包括 Windows、Linux、Mac OS 等。
  • 功能丰富:OpenCV 提供了大量的图像处理、计算机视觉和机器学习算法,涵盖了从基础到高级的各种功能。
  • 易于使用:OpenCV 的 API 设计简洁易懂,易于学习和使用。

2. OpenCV 安装和配置

2.1 OpenCV 安装

OpenCV 可以通过多种方式安装,包括预编译的二进制包、源代码编译以及使用包管理工具(如 pip)安装。

2.2 OpenCV 配置

安装 OpenCV 后,需要配置开发环境,包括添加库路径、头文件路径等。

3. OpenCV 基础

3.1 图像读取和显示

  • cv2.imread():读取图像文件。
  • cv2.imshow():显示图像。
  • cv2.waitKey():等待按键事件。

3.2 图像基础操作

  • cv2.cvtColor():图像颜色空间转换。
  • cv2.resize():图像缩放。
  • cv2.copyMakeBorder():图像边界扩展。
  • cv2.split() 和 cv2.merge():图像通道分离和合并。

3.3 图像滤波

  • cv2.blur():均值滤波。
  • cv2.GaussianBlur():高斯滤波。
  • cv2.medianBlur():中值滤波。
  • cv2.bilateralFilter():双边滤波。

3.4 图像边缘检测

  • cv2.Canny():Canny 边缘检测算法。
  • cv2.Sobel():Sobel 算子。
  • cv2.Laplacian():Laplacian 算子。

3.5 图像形态学操作

  • cv2.erode():腐蚀操作。
  • cv2.dilate():膨胀操作。
  • cv2.morphologyEx():形态学操作(开运算、闭运算等)。

4. OpenCV 进阶

4.1 特征检测与匹配

  • cv2.goodFeaturesToTrack():角点检测。
  • cv2.SIFT()cv2.SURF()cv2.ORB():特征点检测和描述。
  • cv2.BFMatcher()cv2.FlannBasedMatcher():特征匹配。

4.2 轮廓检测

  • cv2.findContours():寻找图像中的轮廓。
  • cv2.drawContours():绘制轮廓。

4.3 图像分割

  • cv2.threshold():图像阈值分割。
  • cv2.watershed():分水岭算法。

4.4 联通组件分析

  • cv2.connectedComponents():连通组件分析。

4.5 目标跟踪

  • cv2.TrackerMIL_create():多实例学习跟踪器。
  • cv2.TrackerKCF_create():核相关滤波跟踪器。

5. OpenCV 应用

5.1 人脸检测

人脸检测是计算机视觉中的一个经典问题,它可以帮助我们识别图像或视频中的 faces。OpenCV 提供了级联分类器(Cascade Classifier)用于人脸检测。

  • 级联分类器:级联分类器是一种基于机器学习的分类器,它由多个简单的分类器级联而成。每个分类器负责检测图像中的某个局部特征,如果所有分类器都认为该区域是人脸,则最终判断该区域为人脸。
  • HAAR 特征:HAAR 特征是一种用于图像分类的特征,它基于图像的灰度差。OpenCV 提供了 HAAR 特征的训练工具,可以帮助您训练自己的人脸检测模型。
  • 示例代码*
    # 创建级联分类器对象
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    # 读取图像
    img = cv2.imread('image.jpg')
    # 将图像转换为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 检测图像中的人脸
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), maxSize=(100, 100))
    # 绘制人脸矩形框
    for (x, y, w, h) in faces:
       cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
    # 显示图像
    cv2.imshow('Image', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

5.2 车牌识别

车牌识别是计算机视觉中的一个重要应用,它可以用于交通监控、智能停车等领域。OpenCV 提供了多种工具和算法,可以帮助您实现车牌识别。

  • 轮廓检测:使用 cv2.findContours() 函数可以检测图像中的轮廓,从而找到车牌区域。
  • 模板匹配:使用 cv2.matchTemplate() 函数可以将车牌模板与图像中的区域进行匹配,从而识别车牌。
  • 字符识别:可以使用 Tesseract OCR 库或其他字符识别算法识别车牌中的字符。
  • 示例代码*
    # 读取图像
    img = cv2.imread('image.jpg')
    # 将图像转换为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 使用 Sobel 算子进行边缘检测
    edges = cv2.Canny(gray, 50, 150, apertureSize=3)
    # 查找轮廓
    contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # 绘制轮廓
    cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
    # 显示图像
    cv2.imshow('Image', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    5.3 物体识别

  • 物体识别是计算机视觉中的一个重要应用,它可以用于智能监控、智能交通等领域。OpenCV 提供了多种工具和算法,可以帮助您实现物体识别。
  • 支持向量机 (SVM):SVM 是一种用于分类的机器学习算法,它可以用于识别图像中的物体。
  • HOG 描述子:HOG 描述子是一种用于图像特征提取的算法,它可以用于描述图像中的物体形状。
  • 示例代码*
    # 创建 SVM 分类器
    svm = cv2.ml.SVM_create()
    # 训练 SVM 分类器
    svm.train(train_data, cv2.ml.ROW_SAMPLE, labels)
    # 使用 SVM 分类器识别图像中的物体
    rects, labels = svm.detectMultiScale(img, scaleFactor=1.05, minNeighbors=3, minSize=(30, 30))
    # 绘制识别结果
    for (x, y, w, h) in rects:
       cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
    # 显示图像
    cv2.imshow('Image', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

5.4 视频分析

视频分析是计算机视觉中的一个重要应用,它可以用于运动检测、目标跟踪、行为识别等领域。OpenCV 提供了多种工具和算法,可以帮助您实现视频分析。

  • 视频读取:使用 cv2.VideoCapture() 函数可以读取视频文件。
  • 视频写入:使用 cv2.VideoWriter() 函数可以将视频写入文件。
  • 背景减除器:使用 cv2.createBackgroundSubtractorMOG2() 函数可以创建背景减除器,用于检测视频中的运动目标。
  • 示例代码*
    # 创建 VideoCapture 对象
    cap = cv2.VideoCapture('video.mp4')
    # 创建 BackgroundSubtractorMOG2 对象
    fgbg = cv2.createBackgroundSubtractorMOG2()
    # 读取视频帧
    while True:
       ret, frame = cap.read()
       if not ret:
           break
       # 应用背景减除器
       fgmask = fgbg.apply(frame)
       # 显示前景掩码
       cv2.imshow('Foreground Mask', fgmask)
       # 按 'q' 键退出循环
       if cv2.waitKey(1) & 0xFF == ord('q'):
           break
    # 释放 VideoCapture 对象
    cap.release()
    # 关闭所有窗口
    cv2.destroyAllWindows()

6. OpenCV 扩展

6.1 DNN 模块

OpenCV 的 DNN (Deep Neural Network) 模块提供了深度学习相关的功能,可以用于图像分类、目标检测、语义分割等任务。

  • 模型加载:使用 cv2.dnn.readNetFromDarknet()cv2.dnn.readNetFromTensorflow() 等函数可以加载不同的深度学习模型。
  • 模型推理:使用 cv2.dnn Net::forward() 函数可以对图像进行模型推理,获取模型的输出结果。
  • 示例代码*
    # 创建网络对象
    net = cv2.dnn.readNetFromDarknet('yolov3.cfg')
    # 加载权重文件
    net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
    net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)
    # 读取图像
    img = cv2.imread('image.jpg')
    # 获取网络输入尺寸
    blob = cv2.dnn.blobFromImage(img, scalefactor=1/255, size=(416,416), mean=(0,0,0), swapRB=True, crop=False)
    # 设置网络输入
    net.setInput(blob)
    # 执行模型推理
    outputs = net.forward()
    # 处理模型输出结果
    ...

6.2 ML模块

OpenCV 的 ML (Machine Learning) 模块提供了机器学习相关的功能,可以用于分类、回归、聚类等任务。

  • SVM:支持向量机 (SVM) 是一种用于分类的机器学习算法。
  • KNN:K 近邻 (KNN) 是一种用于分类和回归的机器学习算法。
  • 决策树:决策树是一种用于分类和回归的机器学习算法。
  • 示例代码*
    ## 创建 SVM 分类器
    svm = cv2.ml.SVM_create()
    ## 设置 SVM 参数
    svm.setType(cv2.ml.SVM_C_SVC)
    svm.setKernel(cv2.ml.SVM_LINEAR)
    svm.setTermCriteria((cv2.TERM_CRITERIA_MAX_ITER, 100, 1e-6))
    ## 训练 SVM 分类器
    svm.train(train_data, cv2.ml.ROW_SAMPLE, labels)
    ## 使用 SVM 分类器进行预测
    ret, result = svm.predict(test_data)
    ## 输出预测
    

7. OpenCV 学习资源

  • OpenCV 官方文档:OpenCV documentation index
  • OpenCV 官方教程:OpenCV: OpenCV Tutorials
  • OpenCV 示例代码:GitHub - opencv/opencv: Open Source Computer Vision Library
  • OpenCV 教程网站:OpenCV: OpenCV Tutorials
  • OpenCV 论坛:Questions - OpenCV Q&A Forum

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/670275.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDeal下的SpringBoot项目部署

一、首先找到自己的sql文件,没有就从数据库挪进来 二、在Maven下打包一下(点击package),看到BUILD SUCCESS就是打包好了 三、将上面两个文件分别挪到 linux 中对应的文件,没有就创建一个(我的是spring_blog…

制作ChatPDF之Elasticsearch8.13.4搭建(一)

Elasticsearch8.x搭建 在Windows系统上本地安装Elasticsearch的详细步骤如下: 1. 下载Elasticsearch 访问 Elasticsearch下载页面。选择适用于Windows的版本8.13.4,并下载ZIP文件。 2. 解压文件 下载完成后,找到ZIP文件(例如…

【2023百度之星初赛】跑步,夏日漫步,糖果促销,第五维度,公园,新材料,星际航行,蛋糕划分

目录 题目:跑步 思路: 题目:夏日漫步 思路: 题目:糖果促销 思路: 题目:第五维度 思路: 题目:公园 思路: 新材料 思路: 星际航行 思路…

网上蛋糕售卖店管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,店员管理,用户管理,商品管理,基础数据管理 前台账户功能包括:系统首页,个人中心,公告信息,商品…

MFC 解决Enter回车键和Esc取消键默认关闭窗口的三种方法

文章目录 问题描述问题原因解决办法方法一:在重载的PreTranslateMessage 函数中屏蔽回车和ESC 的消息方法二:重载OnOK函数方法三:将所有按钮类型设为普通按钮,并设置其中一个按钮为默认按钮 问题描述 一般情况下编写的MFC对话框程…

【如何在日志中输出精确到毫秒的时间戳】

1. 需求 在日志中输出精确到毫秒级的时间戳&#xff0c; 格式为&#xff1a;%Y-%m-%d %H:%M:%S.%MS 如&#xff1a;2024-05-30 22:33:25.821 2. 代码实现 #include <iostream> #include <chrono> #include <iomanip> #include <sstream> #include &…

锻压设备智能制造工厂物联数字孪生平台,推进制造业数字化转型

锻压设备智能制造工厂物联数字孪生平台&#xff0c;推进制造业数字化转型。随着全球制造业的飞速发展&#xff0c;数字化转型已经成为企业提升竞争力、实现可持续发展的关键。在锻压设备智能制造领域&#xff0c;工业物联数字孪生平台以其强大的数据集成、分析和管理能力&#…

k均值过程图解

k均值聚类实际上是数据空间质心的Voronoi 划分问题。

C语言 | Leetcode C语言题解之第124题二叉树中的最大路径和

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int max; int dfs(struct TreeNode* root){if(!root) return 0;int left dfs(root->left…

中继器、集线器、网桥、交换机、路由器和网关

目录 前言一、中继器、集线器1.1 中继器1.2 集线器 二、网桥、交换机2.1 网桥2.2 交换机 三、路由器、网关3.1 路由器3.2 网关 总结 前言 理解这些设备的关键是他们运行在不同的层次上。之所以存在不同层的问题&#xff0c;是因为不同的设备使用不同的信息来决定如何交换。在典…

AI大模型的创新之道:突破局限与引领未来

1、引言 随着人工智能技术的飞速发展&#xff0c;AI大模型已成为推动科技进步的重要力量。它们不仅拥有强大的数据处理能力和学习能力&#xff0c;还能在多个领域展现出超越人类智慧的潜力。然而&#xff0c;AI大模型也面临着诸多挑战和局限&#xff0c;如数据依赖、计算资源消…

[数据集][目标检测]剪刀石头布检测数据集VOC+YOLO格式1973张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1973 标注数量(xml文件个数)&#xff1a;1973 标注数量(txt文件个数)&#xff1a;1973 标注…

【Qt】【模型视图架构】代理模型示例

文章目录 1. 基本排序/过滤模型Basic Sort/Filter Model Example2. 自定义排序/过滤模型Custom Sort/Filter Model ExampleFilterLineEdit类定义及实现MySortFilterProxyModel类定义及实现 1. 基本排序/过滤模型Basic Sort/Filter Model Example 官方提供的基本排序/过滤模型示…

YOLOv5改进 | 添加注意力篇 | 利用YOLOv10提出的PSA注意力机制助力YOLOv5有效涨点(附代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是YOLOv10提出的PSA注意力机制&#xff0c;自注意力在各种视觉任务中得到了广泛应用&#xff0c;因为它具有显著的全局建模能力。然而&#xff0c;自注意力机制表现出较高的计算复杂度和内存占用。为了解决这个问题&#xff0c;鉴于注意…

本地公网IP是什么?

本地公网IP&#xff08;Public IP Address&#xff09;是指分配给计算机或设备的可在互联网上直接访问的唯一标识符。每个连接到互联网的设备都会被分配一个公网IP&#xff0c;用于与其他设备进行通信。本地公网IP在网络通信中起到了非常重要的作用&#xff0c;为用户提供了方便…

Docker 简介和安装

目录 Docker 是什么 跟普通虚拟机的对比 打包、分发、部署 Docker 部署的优势 Docker 通常用来做什么 重要概念&#xff1a;镜像、容器 安装 镜像加速源 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机&#xff0c;它只虚…

【创作活动】如何让大模型更聪明:提升智能的技术策略

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

前端框架安全防范

前端框架安全防范 在现代Web开发中&#xff0c;前端框架如Angular和React已经成为构建复杂单页面应用&#xff08;SPA&#xff09;的主流工具。然而&#xff0c;随着应用复杂度的增加&#xff0c;安全问题也变得越来越重要。本文将介绍如何在使用Angular和React框架时&#xf…

内网渗透-在HTTP协议层面绕过WAF

进入正题&#xff0c;随着安全意思增强&#xff0c;各企业对自己的网站也更加注重安全性。但很多web应用因为老旧&#xff0c;或贪图方便想以最小代价保证应用安全&#xff0c;就只仅仅给服务器安装waf。 本次从协议层面绕过waf实验用sql注入演示&#xff0c;但不限于实际应用…

mysql(数据库)可视化工具——Navicat Premium

Navicat Premium是一款功能强大的数据库管理工具&#xff0c;它支持多种数据库管理系统&#xff0c;包括MySQL、MariaDB、SQL Server、SQLite、Oracle和PostgreSQL等。Navicat Premium提供了直观的用户界面&#xff0c;使用户能够轻松地管理数据库结构、执行复杂的SQL查询、导入…