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,…

数据结构与算法:二叉树

一、二叉树的链式存储 树结点数据结构 typedef char BiElemType; typedef struct BiTNode{BiElemType c;struct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;树中任何一个结点都是一个结构体,它的空间是通过malloc申请出来的 二、二叉树层次建树 …

<网络安全>《38 网络攻防专业课<第四课 - windows常见漏洞>》

1 系统漏洞概述 系统漏洞概述: 漏洞是指应用软件或操作系统软件在逻辑设计上的缺陷,或在编写时产生的错误。 漏洞是硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。 2 Window…

JS面向对象:六.原型链

原型链是 JavaScript 中实现对象之间继承关系的一种机制。在 JavaScript 中,每个对象都有一个指向另一个对象的链接,这个链接被称为原型。当试图访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 就会沿着…

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

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

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

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

已解决ModuleNotFoundError: No module named ‘cv2’异常的正确解决方法,亲测有效!!!

已解决ModuleNotFoundError: No module named ‘cv2’异常的正确解决方法,亲测有效!!! 文章目录 问题分析 报错原因 解决思路 解决方法 总结 在处理图像和视频等计算机视觉任务时,OpenCV是一个非常强大的库。然而…

数据库:存储、管理和分析数据的基石——数据库的介绍,分类,作用和特点

引言: 在现代信息时代,数据的管理和存储成为各个领域中不可或缺的一部分。数据库技术应运而生,它提供了一种结构化方式来组织、存储和管理数据。本文将详细介绍数据库的概念,并对常见的数据库进行分类,探讨它们的作用、…

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

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

Linux colrm命令教程:如何移除文本文件中的指定列(附实例详解和注意事项)

Linux colrm命令介绍 colrm(column remove)命令在Linux中用于编辑源代码文件、脚本文件或常规文本文件中的文本。此命令可以从文件中移除选定的列。在这里,列被定义为一行中的单个字符。它始终从索引1开始,而不是0。 Linux colr…

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

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

如何优雅地与ChatGPT对话?

ChatGPT已经发布了一年之久了,但你真的会使用ChatGPT吗?同一个问题,不同的问法得到的答案可能千差万别,你可以把ChatGPT当作一个知识面很广的专家,他上知天文下知地理,但他无法直接知道你的意图&#xff0c…

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

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

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

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

AutoSAR(基础入门篇)10.6-模式管理进阶

目录 一、概念 1、Mode Requester(MRqr) 2、Mode User(MUsr) 3、Mode Manager(MMgr) 4、Mode Declaration Group 5、Mode Switch Event 二、总结

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

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

RSA后端加密,解密,加签及验签

目录 1.说明 2.加密和加签的区别 3.示例 4.注意事项 1.说明 RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。 公钥是公开的,可以多人持有;私钥是保密的,只有自己持有。…