OpenCV 4.0+Python机器学习与计算机视觉实战
- 💂 个人网站:【办公神器】【游戏大全】【神级源码资源网】
- 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】
- 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】
目录
- 前言
- 第一部分:安装OpenCV 4.0及相关依赖
- 第二部分:图像处理基础
- 第三部分:图像特征提取与描述
- 第四部分:目标检测与识别
- 第五部分:图像分类与机器学习
- 总结
- 好书推荐
前言
OpenCV是一款广泛应用于计算机视觉和图像处理领域的开源库。本文将引导读者通过Python使用OpenCV 4.0以上版本,实现一系列机器学习与计算机视觉的应用,包括图像处理、特征提取、目标检测、机器学习等内容。最终,我们将通过一个实战项目构建一个简单的人脸识别系统。
第一部分:安装OpenCV 4.0及相关依赖
要开始本次实战,首先需要安装OpenCV 4.0和其他必要的Python库。推荐使用虚拟环境来避免与其他项目产生冲突。以下是安装步骤:
- 安装虚拟环境(可选)
pip install virtualenv
- 创建虚拟环境(例如,命名为cv_env)
virtualenv cv_env
- 激活虚拟环境
- Windows:
cv_env\Scripts\activate
- macOS/Linux:
source cv_env/bin/activate
- 安装OpenCV 4.0和其他依赖库
pip install opencv-python
pip install numpy
pip install matplotlib
第二部分:图像处理基础
在本节中,我们将学习如何使用OpenCV处理图像,包括图像的读取、显示和保存。同时,我们还将了解一些基本的图像处理技术。
- 图像读取与显示
import cv2# 读取图像
image = cv2.imread("image.jpg")# 显示图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 图像保存
# 修改图像并保存
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imwrite("gray_image.jpg", gray_image)
- 图像调整与滤波
# 图像调整
resized_image = cv2.resize(image, (new_width, new_height))# 图像滤波
blurred_image = cv2.GaussianBlur(image, (kernel_size, kernel_size), 0)
- 图像边缘检测
# 边缘检测
edges = cv2.Canny(image, threshold1, threshold2)
第三部分:图像特征提取与描述
在这一部分,我们将学习如何使用OpenCV提取图像的关键点和特征描述符,并进行特征匹配。
- 特征提取与描述
import cv2# 创建ORB特征检测器
orb = cv2.ORB_create()# 在图像中寻找关键点并计算特征描述符
keypoints, descriptors = orb.detectAndCompute(image, None)# 绘制关键点
output_image = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0), flags=0)# 显示结果
cv2.imshow("Features", output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 特征匹配
import cv2# 读取两张图像
image1 = cv2.imread("image1.jpg")
image2 = cv2.imread("image2.jpg")# 创建ORB特征检测器
orb = cv2.ORB_create()# 在两张图像中寻找关键点并计算特征描述符
keypoints1, descriptors1 = orb.detectAndCompute(image1, None)
keypoints2, descriptors2 = orb.detectAndCompute(image2, None)# 创建BFMatcher对象
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)# 特征匹配
matches = bf.match(descriptors1, descriptors2)# 根据特征匹配结果绘制匹配点
output_image = cv2.drawMatches(image1, keypoints1, image2, keypoints2, matches, None, flags=2)# 显示结果
cv2.imshow("Matching Features", output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
第四部分:目标检测与识别
在这一部分,我们将介绍目标检测与识别的基本原理和方法。我们将学习如何使用Haar级联分类器和基于深度学习的方法来检测和识别图像中的目标。
- Haar级联分类器目标检测
import cv2# 加载Haar级联分类器
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")# 加载图像并转换为灰度图像
image = cv2.imread("image.jpg")
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用分类器进行人脸检测
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))# 在图像上绘制检测到的人脸框
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)# 显示结果
cv2.imshow("Face Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 基于深度学习的目标检测(使用预训练模型,如YOLO或SSD) 在此处展示具体代码会比较冗长,因为涉及模型加载和推理过程。可以使用OpenCV的dnn模块来加载预训练模型并进行目标检测。
第五部分:图像分类与机器学习
在这一部分,我们将探索图像分类的机器学习方法。我们将介绍图像分类的常用算法,并使用OpenCV结合机器学习模型对图像进行分类。
- 图像分类的机器学习方法
- 支持向量机(SVM)分类器
- K近邻(KNN)分类器
- 决策树分类器
- 使用SVM进行图像分类
import cv2
import numpy as np# 准备训练数据和标签
train_data = np.array([...]) # 特征向量组成的训练数据
labels = np.array([...]) # 对应训练数据的标签# 创建SVM分类器
svm = cv2.ml.SVM_create()# 训练SVM分类器
svm.train(train_data, cv2.ml.ROW_SAMPLE, labels)# 准备测试数据
test_data = np.array([...]) # 特征向量组成的测试数据# 进行分类预测
_, result = svm.predict(test_data)# 输出预测结果
print("Predicted label:", result)
总结
通过本文的学习,我们掌握了使用OpenCV 4.0及Python进行机器学习与计算机视觉的基础知识。我们学习了图像处理基础、图像特征提取与描述、目标检测与识别、图像分类与机器学习,并最终完成了一个实战项目:人脸识别系统。通过不断练习和探索,我们可以在计算机视觉和机器学习领域取得更多的成就。希望读者在未来的学习和工作中能够运用这些知识,开发更加智能和创新的应用。
好书推荐
《OpenCV 4.0+Python机器学习与计算机视觉实战》
内容简介
《OpenCV 4.0+Python机器学习与计算机视觉实战》详细阐述了机器学习与计算机视觉相关的基本解决方案,主要包括滤镜、深度传感器和手势识别、通过特征匹配和透视变换查找对象、使用运动恢复结构重建3D场景、在OpenCV中使用计算摄影、跟踪视觉上的显著对象、识别交通标志、识别面部表情、对象分类和定位、检测和跟踪对象等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。
📚 京东自营购买链接:《OpenCV 4.0+Python机器学习与计算机视觉实战》
http://itoday.top/
相关文章:

OpenCV 4.0+Python机器学习与计算机视觉实战
💂 个人网站:【办公神器】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言第一部分&…...

自学网络安全(黑客)全笔记
一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…...

WAF/Web应用安全(拦截恶意非法请求)
Web 应用防火墙(Web Application Firewall, WAF)通过对 HTTP(S) 请求进行检测,识别并阻断 SQL 注入、跨站脚本攻击、跨站请求伪造等攻击,保护 Web 服务安全稳定。 Web 安全是所有互联网应用必须具备的功能,…...

Windows环境下git客户端中的git-bash和MinGW64
我们在 Windows10 操作系统下,安装了 git 客户端之后,可以通过 git-bash.exe 打开一个 shell: 执行一些 linux 系统里的命令: 注意到上图紫色的 MINGW64. Mingw-w64 是原始 mingw.org 项目的改进版,旨在支持 Window…...

欧姆龙CX系列PLC串口转以太网欧姆龙cp1hplc以太网连接电脑
你是否还在为工厂设备信息采集困难而烦恼?捷米特JM-ETH-CX转以太网通讯处理器为你解决这个问题! 捷米特JM-ETH-CX转以太网通讯处理器专门为满足工厂设备信息化需求而设计,可以用于欧姆龙多个系列PLC的太网数据采集,非常方便构建生…...

Vue3笔记
1. Vue2 选项式 API vs Vue3 组合式API <script> export default { data(){ return { count:0 } }, methods:{ addCount(){ this.count } } } </script> <script setup> import { ref } from vue const count ref(0) c…...

git相关
gerrit用户指南: 资料:Gerrit 用户指南 gerrit-user-guide 上述有介绍如何review,review并非修改代码之后如何重新提交等操作 jenkins介绍 Jenkins详细教程 - 知乎 一、jenkins是什么? Jenkins是一个开源的、提供友好操作界…...

车道线检测|利用边缘检测的原理对车道线图片进行识别
前言 那么这里博主先安利一些干货满满的专栏了! 这两个都是博主在学习Linux操作系统过程中的记录,希望对大家的学习有帮助! 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…...
C++—static关键字详解
引言: C的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 一.面向过程中的static 1.静态全局变量 静态全局变量有以下特点…...

CS144学习笔记(1):Internet and IP
1.网络应用 网络应用可以在世界范围内交换数据,例如你可以通过浏览器读取出版社服务器提供的文章。网络应用的基本模型:两台主机各自在本地运行一个程序,程序通过网络来通信。 最常用的通信模型使用双向可靠字节流,通信的两台主机…...

2 Linux基础篇-Linux入门
2Linux基础篇-Linux入门 文章目录 2Linux基础篇-Linux入门2.1 Linux介绍2.2 Linux和Unix的关系 学习视频来自于B站 【小白入门 通俗易懂】2021韩顺平 一周学会Linux。 2.1 Linux介绍 常见的操作系统有 Windows、MacOS、Android、ios、Linux、Unix等。而其中,Linux是…...

分享200+个关于AI的网站
分享200个关于AI的网站 欢迎大家访问:https://tools.haiyong.site/ai 快速导航 AI 应用AI 写作AI 编程AI 设计AI 作图AI 训练模型AI 影音编辑AI 效率助手 AI 应用 文心一言: https://yiyan.baidu.com/ 百度出品的人工智能语言模型 ChatGPT: https://chat.openai.c…...

静态 链接
1、空间与地址的分配 现在的链接器空间分配的策略基本上都采用 “相似段合并” 的方式。通过将所有相同类型的 section 合并到一起,例如将所有输入目标文件的 .text 合并(按顺序合并)到输出文件的 .text 节中;然后,链接…...

【C#性能】C# 语言中的数组迭代
一、说明 可迭代性,是数组等操作的根本;在C程序开发过程中,可迭代操作是非常普遍、非常广泛的,然而,对这种操作知道多少,又不知道多少,都将影响开发灵活性、开发的进度。因此,本文干…...

全志F1C200S嵌入式驱动开发(解决spi加载过慢的问题)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 之前的几个章节当中,我们陆续解决了spi-nor驱动的问题、uboot支持spi-nor的问题。按道理来说,下面要做的应该就是用uboot的loady命令把kernel、dtb、rootfs这些文件下载到ddr,然…...

信息系统项目管理师(第四版)教材精读思维导图-第三章信息系统治理
请参阅我的另一篇文章,综合介绍软考高项: 信息系统项目管理师(软考高项)备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 目录 3.1 IT治理 3.2 IT审计 3.1 IT治理 3.2 IT审计...

区间预测 | MATLAB实现基于QRF随机森林分位数回归多变量时间序列区间预测模型
区间预测 | MATLAB实现基于QRF随机森林分位数回归多变量时间序列区间预测模型 目录 区间预测 | MATLAB实现基于QRF随机森林分位数回归多变量时间序列区间预测模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRF随机森林分位数回归多变量时间序列区间…...

五步快速搭建个性化外卖小程序商城
随着人们生活节奏的加快,外卖行业蓬勃发展。为了满足用户的需求,许多企业开始使用小程序商城来提供外卖服务。那么,如何制作一个功能完善、用户友好的外卖小程序商城呢?下面就来为大家详细介绍一下制作的步骤。 首先,我…...

jenkins中配置了发送邮件,构建后却没有发邮件Not sent to the following valid addresse
【问题描述】:jekins中配置了发送邮件,构建后却没有发邮件的问题,构建报错:Not sent to the following valid addresse 【报错显示】: 【问题定位】:Extended E-mail Notification中,没有配置…...

装箱问题(背包问题)
题目描述 有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。 输入格式 第一行,一个整…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...