OpenCV 入门讲解

OpenCV 入门讲解

在这里插入图片描述

OpenCV(Open Source Computer Vision Library) 是一个开源的计算机视觉库,它提供了许多高效实现计算机视觉算法的函数,从基本的滤波到高级的物体检测都有涵盖。OpenCV 使用 C/C++ 开发,同时也提供了 Python、Java、MATLAB 等其他语言的接口。它是跨平台的,可以在 Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。

OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。此外,OpenCV 还提供了机器学习模块,你可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。

1. 安装 OpenCV:

在使用 OpenCV 之前,您需要安装它。您可以使用以下方式之一:

使用包管理工具(如pip):

pip install opencv-python

使用conda:

conda install -c conda-forge opencv

2. 导入 OpenCV:

import cv2

3. 图像读取与显示:

Copy code
import cv2# 读取图像
image = cv2.imread('path/to/image.jpg')# 显示图像
cv2.imshow('Original Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. 图像基本操作:

Copy code
# 获取图像尺寸和通道数
height, width, channels = image.shape# 访问像素值
pixel_value = image[100, 50]# 修改像素值
image[100, 50] = [255, 255, 255]# 裁剪图像区域
roi = image[100:200, 150:250]# 图像通道拆分与合并
b, g, r = cv2.split(image)
merged_image = cv2.merge([b, g, r])

5. 色彩空间转换:

Copy code
# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# HSV 色彩空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

6. 图像滤波与处理:

Copy code
# 高斯模糊
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)# 中值滤波
median_blur = cv2.medianBlur(image, 5)# 图像阈值处理
ret, thresholded_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

7. 图像几何变换:

Copy code
import numpy as np# 平移
M = np.float32([[1, 0, 50], [0, 1, 20]])
translated_image = cv2.warpAffine(image, M, (width, height))# 旋转
center = (width // 2, height // 2)
M = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated_image = cv2.warpAffine(image, M, (width, height))

8. 视频处理:

Copy code
cap = cv2.VideoCapture('path/to/video.mp4')while cap.isOpened():ret, frame = cap.read()if not ret:break# 在这里进行图像处理cv2.imshow('Video', frame)if cv2.waitKey(25) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

9. 特征检测与描述符:

Copy code
# 使用SIFT检测关键点和计算描述符
sift = cv2.SIFT_create()
keypoints, descriptors = sift.detectAndCompute(gray_image, None)

10. 目标检测与跟踪:

使用预训练的目标检测模型,如Haar级联分类器或深度学习模型(如SSD、YOLO)。

11. 边缘检测与图像梯度:

# Sobel边缘检测
sobel_x = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0, ksize=5)
sobel_y = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1, ksize=5)
magnitude = np.sqrt(sobel_x**2 + sobel_y**2)
direction = np.arctan2(sobel_y, sobel_x)

12. 图像金字塔:

# 图像缩放
smaller_image = cv2.pyrDown(image)
larger_image = cv2.pyrUp(image)

13. 直方图:

# 绘制直方图
hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256])# 直方图均衡化
equalized_image = cv2.equalizeHist(gray_image)

14. 霍夫变换:

# 霍夫直线变换
lines = cv2.HoughLines(edges, 1, np.pi/180, threshold=100)# 霍夫圆变换
circles = cv2.HoughCircles(gray_image, cv2.HOUGH_GRADIENT, dp=1, minDist=20, param1=50, param2=30, minRadius=0, maxRadius=0)

15. 特征匹配:

# 使用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)

16. 使用深度学习模型:

OpenCV 中集成了深度学习模块,可以使用预训练模型进行图像分类、对象检测等任务。示例使用基于深度学习的对象检测:

net = cv2.dnn.readNet('path/to/model.weights', 'path/to/configuration_file.cfg')
image_blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)net.setInput(image_blob)
output_layers_names = net.getUnconnectedOutLayersNames()
outputs = net.forward(output_layers_names)

17. 自定义滤波器和内核:

# 自定义卷积核
custom_kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], dtype=np.float32)# 应用卷积核
custom_filtered_image = cv2.filter2D(image, -1, custom_kernel)

这只是 OpenCV 的一小部分功能,建议深入研究每个主题并查看 OpenCV 官方文档,以了解更多详细信息和示例。同时,您还可以通过实践项目来更好地掌握这些概念。

如果你想深入学习 OpenCV,我推荐以下资源:

  • 知乎专栏:OpenCV教程:超详细的OpenCV入门教程,值得收藏。这篇文章详细介绍了 OpenCV 的基础知识和使用方法,适合初学者快速入门.
  • Bilibili 视频教程:零基础入门【OpenCV4】!小白适用!55讲全!教授带你从零讲解OpenCV4图像处理!。这个视频教程共有 55 讲,从基础到实战,适合零基础的学习者.
  • Bilibili 视频教程:OpenCV学习—OpenCV图像处理入门基础及计算机视觉项目上手实践【算法原理+项目实战】。这个视频教程共有 21 讲,包括图像处理基本操作、边缘检测等内容。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

短链接系统测试报告

目录 项目背景 项目功能 自动化测试 总结 项目背景 随着互联网的发展,链接(URL)变得越来越长且复杂,这不仅影响用户体验,还可能由于字符限制导致在某些平台或应用中无法完整显示。为了解决这一问题,我…

Ubuntu22.04LTS编译Frida历史版本,环境配制及细节调整

经常使用Frida的朋友们可能会遇到Frida的各种问题需要自定义的,而这时候Frida的本地编译就显得很重要了。 最近一位朋友发现使用Frida14/15/16版的server只能连拉一定数量的设备,超过了frida-device-manager便不能连接设备。 实现没有办法,…

综合练习

目录 查询每个员工的编号、姓名、职位、基本工资、部门名称、部门位置 确定要使用的数据表 确定已知的关联字段 查询每个员工的编号、姓名、职位、基本工资、工资等级 确定要使用的数据表 确定已知的关联字段 查询每个员工的编号、姓名、职位、基本工资、部门名称、工资…

⭐北邮复试刷题589. N 叉树的前序遍历__DFS (力扣每日一题)

589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 示例 1: 输入:root [1,null,…

数据安全之认识数据资产管理平台

文章目录 一、什么是数据资产二、什么是数据资产管理平台1、什么是数据资产管理平台2、为什么需要数据资产管理平台 三、数据资产管理平台的主要功能四、数据资产管理平台的工作原理五、数据资产管理平台的应用场景六、安全资产管理平台与数据资产管理平台的区别与关系1、安全资…

华为配置旁挂二层组网直接转发示例

配置旁挂二层组网直接转发示例 组网图形 图1 配置旁挂二层组网直接转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff…

图像处理之《隐写网络的隐写术》论文阅读

一、文章摘要 隐写术是一种在双方之间进行秘密通信的技术。随着深度神经网络(DNN)的快速发展,近年来越来越多的隐写网络被提出,并显示出良好的性能。与传统的手工隐写工具不同,隐写网络的规模相对较大。如何在公共信道上秘密传输隐写网络引起…

anomalib1.0学习纪实-续2:三个文件夹

为了读懂程序,有三个最重要的文件夹,如下图: 正好对应四个类,如下图: 三个类的来源如下图所示: 注意,MVTec是个大类,里面用到了这里的第四个类MVTecDataset,代码如下。…

洛谷: P1553 数字反转(升级版)

思路: 没想到什么好办法,一步一步来。整体就是反转,删除前导/后导0,反转,删除前导/后导0。 第一次AC没过去,原因是没考虑到分数的分母前导0的情况,比如1234567890/1234567890这个样例,结果输出…

蓝桥杯官网填空题(寻找整数)

问题描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 有一个不超过 10^17 的正整数 n,知道这个数除以 2 至 49 后的余数如下表所示,求这个正整数最小是多少。 运行限制 最大运行时间:…

【软考问题】-- 10 - 知识精讲 - 项目风险管理

一、基本问题 1:按照可预测性,风险分哪三类? (1)已知风险:如项目目标不明确, 过分乐观的进度计划, 设计或施工变更和材料价格波动等。(2)可预测风险&#xff…

智慧城市与数字孪生:实现城市可持续发展的关键

一、引言 随着全球城市化进程的加速,城市面临着诸多挑战,如资源紧张、环境恶化、交通拥堵等。为了解决这些问题,智慧城市的概念应运而生。智慧城市利用先进的信息通信技术,提升城市治理水平,改善市民的生活质量。而数…

一、直方图相关学习

1、灰度直方图 1.1 基本概念和作用 表示图像中每个灰度级别的像素数量。用于分析图像的亮度分布情况。 1.2 代码示例 参数介绍 hist cv2.calcHist(images, channels, mask, histSize, ranges, hist, accumulate)-images:输入图像的列表。对于灰度图像&#xff0…

Prometheus安装

一、Prometheus的简介 Prometheus是一种开源的监控和警报工具,用于收集、存储和查询各种系统和服务的指标数据。它具有灵活的查询语言和强大的可视化功能,可用于实时监控应用程序性能和状态。 二、Prometheus下载 1、官网下载地址 下载Prometheus 2、P…

【regex】正则表达式

集合 [0-9.] [0-9.\-] 例子 正则表达式,按照规则写,写的时候应该不算困难,但是可读性差 不同语言中regex会有微小的差异 vim 需要转义, perl/python中不需要转义 锚位 \b am\b i am 命名 / 命名捕获组 ( 捕获组(…

167基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序

基于matlab的根据《液体动静压轴承》编写的有回油槽径向静压轴承的程序,可显示承载能力、压强、刚度及温升等图谱.程序已调通,可直接运行。 167 显示承载能力、压强、刚度及温升 (xiaohongshu.com)https://www.xiaohongshu.com/explore/65d212b200000000…

numpy模块:从基础到高级的完整指南【第88篇—NumPy数组操作】

numpy模块:从基础到高级的完整指南 在Python的科学计算领域,NumPy模块是一个不可或缺的利器。它提供了丰富的数学函数和矩阵操作,使得数据处理、分析和科学计算变得更加高效。本文将带你初步了解NumPy模块,并通过实例代码深入解析…

2.17日学习打卡----初学Dubbo(二)

2.17日学习打卡 目录: 2.17日学习打卡一. Dubbo入门案例需求介绍配置开发环境dubbo-producerdubbo-consumer运行测试IDEA开启DashBoard面板 二. Dubbo高级特性序列化协议安全地址缓存超时时间与配置覆盖关系重试机制多版本负载均衡集群容错服务降级服务限流原理服务限流实现结果…

[深度学习] 深入理解什么是卷积神经网络

​ 🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[深度学习] ❤️ 热门学习专栏:[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

Kerberos认证详解

对于Kerberos认证,可以大概如下图: 但是如果是详细的话,Kerberos认证过程可以分为三个部分,六个过程 1.AS-REQ&&AS-REP 1.AS-REQ 当域内某个用户输入了账号或者密码的时候,客户端就会发送一个authenticator…