【OpenCV】OpenCV指南:图像处理基础及实例演示

news2024/9/24 6:18:29

OpenCV(Open Source Computer Vision Library)是一个功能强大且易于使用的库,广泛应用于图像处理和计算机视觉领域。本文将详细介绍OpenCV的基础使用方法,并提供丰富的代码示例,帮助读者更直观地理解和应用。

1. 什么是OpenCV?

OpenCV是一个开源的计算机视觉和机器学习软件库,由Intel在1999年开发,并于2000年推出。它可以处理图像和视频中的许多常见任务,如图像处理(滤波、边缘检测等)、视频处理(实时视频处理等)、物体检测和识别(人脸识别、物体跟踪等)以及机器学习(支持向量机、神经网络等)。目前,OpenCV支持C++、Python、Java和MATLAB等多种编程语言,并可在多个平台上运行,如Windows、Linux、macOS和Android。

2. 安装OpenCV

在安装OpenCV之前,需要确保已经安装了Python。可以通过pip命令来安装OpenCV:

pip install opencv-python
pip install opencv-python-headless  # 不需要绘图界面的版本

3. 基本操作

3.1 导入库

首先需要导入OpenCV库和numpy库:

import cv2
import numpy as np

3.2 读取和显示图像

通过cv2.imread()读取图像,使用cv2.imshow()显示图像,并通过cv2.waitKey(0)保持窗口直到按下键盘任意键关闭。

import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 显示图像
cv2.imshow('Image', image)
# 等待按键事件并关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

3.3 保存图像

可以使用cv2.imwrite()来保存处理后的图像。

import cv2
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 保存图像
cv2.imwrite('path_to_save_image.jpg', image)
# 显示保存信息
print("Image saved as path_to_save_image.jpg")

4. 图像处理基础

4.1 转换颜色空间

在OpenCV中,颜色空间转换是一个常见的操作,例如将图像从BGR转换为RGB或灰度图。

# 将BGR图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

4.2 图像缩放

图像缩放可以使用cv2.resize()函数来实现。

# 将图像缩放为指定大小
resized_image = cv2.resize(image, (new_width, new_height))

4.3 图像翻转

图像翻转可以通过cv2.flip()函数实现。

# 水平翻转图像
flipped_image = cv2.flip(image, 1)

4.4 边缘检测

边缘检测是图像处理中的一个重要步骤,可以使用cv2.Canny()函数进行边缘检测。

# 将图像转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用Canny边缘检测
edges = cv2.Canny(gray_image, 100, 200)

4.5 高斯模糊

高斯模糊是一种常用的图像平滑技术,可以使用cv2.GaussianBlur()函数实现。

# 应用高斯模糊
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)

4.6 形态学操作

形态学操作包括膨胀和腐蚀等,可以使用cv2.dilate()cv2.erode()函数。

# 定义结构元素
kernel = np.ones((5, 5), np.uint8)
# 应用膨胀操作
dilated_image = cv2.dilate(image, kernel, iterations=1)

4.7 图像平滑

图像平滑可以通过均值滤波、中值滤波和双边滤波实现。

# 应用均值滤波
smoothed_image = cv2.blur(image)

4.8 直方图均衡化

直方图均衡化是一种增强图像对比度的方法,可以使用cv2.equalizeHist()函数。

# 将图像转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用直方图均衡化
equalized_image = cv2.equalizeHist(gray_image)

5. 图像中的基本绘制操作

OpenCV提供了多种绘制函数,包括线条、矩形、圆形和文本。

5.1 绘制线条

# 绘制线条
cv2.line(image, (start_x, start_y), (end_x, end_y), (color), thickness)

5.2 绘制矩形

# 绘制矩形
cv2.rectangle(image, (top_left_x, top_left_y), (bottom_right_x, bottom_right_y), (color), thickness)

5.3 绘制圆形

# 绘制圆形
cv2.circle(image, (center_x, center_y), radius, (color), thickness)

5.4 绘制多边形

# 绘制多边形
points = np.array([[(x1, y1), (x2, y2), (x3, y3), ...]], np.int32)
cv2.polylines(image, [points], isClosed=True, color=(255, 0, 0), thickness=3)

5.5 绘制文本

# 绘制文本
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(image, 'Text', (x, y), font, font_scale, (color), thickness)

6. 实例项目:边缘检测与形态学操作结合

一个典型的应用案例将边缘检测与形态学操作结合起来进行基本的图像处理。

import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用高斯模糊
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
# 应用Canny边缘检测
edges = cv2.Canny(blurred_image, 50, 150)
# 定义形态学核心
kernel = np.ones((5, 5), np.uint8)
# 应用膨胀操作以增强边缘
dilated_edges = cv2.dilate(edges, kernel, iterations=1)
# 显示最终结果
cv2.imshow('Original Image', image)
cv2.imshow('Edges', edges)
cv2.imshow('Dilated Edges', dilated_edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

7. 总结

OpenCV是一个功能强大且易于使用的库,广泛应用于图像处理和计算机视觉领域。从读取和显示图像,到颜色空间转换、图像缩放、翻转、边缘检测、高斯模糊、形态学操作以及图像平滑和绘制,本文详细介绍了OpenCV的基础使用方法,附带了丰富的代码示例,帮助读者更直观地理解和应用。

✅作者简介:热爱科研的人工智能开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多人工智能资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

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

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

相关文章

【例题】证明极限

已知&#xff1a; ∀ ε > 0 , ∃ n > N , ∣ a n − A ∣ < ε \forall \varepsilon >0, \exist n>N,|a_n-A|<\varepsilon ∀ε>0,∃n>N,∣an​−A∣<ε 目标&#xff1a; ∀ ε > 0 , ∃ n > N 1 , ∣ a 1 . . . a n n − A ∣ < ε \…

pytorch学习笔记二:用pytorch神经网络模型做气温预测、分类任务构建和分类网络构建、卷积神经网络原理介绍

文章目录 一、搭建pytorch神经网络进行气温预测1&#xff09;基础搭建2&#xff09;实际操作标识特征和标签3&#xff09;构建成标准化的预处理数据&#xff08;做标准化收敛速度更快&#xff09; 二、按照建模顺序构建完成网络架构1&#xff09;np.array格式的标签(y)和特征(x…

从入门到精通:计算机视觉学习路线与实战项目推荐

全面解析计算机视觉的学习路径&#xff0c;深入探讨关键技术与实战项目&#xff0c;助您快速掌握核心技能 引言 随着人工智能的飞速发展&#xff0c;计算机视觉已成为AI领域中最具潜力和应用价值的分支之一。从自动驾驶到医疗影像分析&#xff0c;计算机视觉技术正在改变我们的…

9.23-部署项目

部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: ma…

【通俗易懂介绍OAuth2.0协议以及4种授权模式】

文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 …

【LIO-SAM】LIO-SAM论文翻译(2020年)

【LIO】LIO-SAM论文翻译&#xff08;2020年&#xff09; 1&#xff0e;Abstract&#xff12;&#xff0e;INTRODUCTION&#xff14;&#xff0e;通过平滑和映射实现激光雷达惯性里程计A. 系统概述B. IMU Preintegration Factor&#xff08;推导过程参阅&#xff09;C. Lidar Od…

对onlyoffice进行定制化开发

基于onlyoffice8.0源码&#xff0c;进行二次开发&#xff0c;可实现包括但不限于以下的功能 1、内容控件的插入 2、内容空间的批量替换 3、插入文本 4、插入图片 5、添加&#xff0c;去除水印 6、修改同时在线人数限制 7、内容域的删除 8、页面UI的定制化 9、新增插件开发 10、…

Pytest-如何将allure报告发布至公司内网

原理简介 使用Python启动HTTP服务器&#xff0c;指定一个端口号port&#xff0c;内网用户可以使用ipport访问报告。 本文章继续进阶&#xff0c;简单使用nginx进行一个代理&#xff0c;使用域名可以直接访问报告。 前情概述 Pytest-allure如何在测试完成后自动生成完整报告&am…

Ansible流程控制-条件语句_循环语句

文章目录 Ansible流程控制条件语句且、或、非、是模糊条件when指令的详细使用方法 循环语句如何使用使用item变量结合with_items或loop指令item变量有固定子元素&#xff1f; 实例-服务器安装基础环境优化需求部分实现换指定新仓库安装基础软件包 Ansible流程控制 一、 1. 条件…

opencv4.5.5 GPU版本编译

一、安装环境 1、opencv4.5.5 下载地址&#xff1a;https://github.com/opencv/opencv/archive/refs/tags/4.5.5.ziphttps://gitee.com/mirrors/opencv/tree/4.5.0 2、opencv-contrib4.5.5 下载地址&#xff1a;https://github.com/opencv/opencv_contrib/archive/refs/tags/4…

塑料瓶回收流水线分拣系统源码分享

塑料瓶回收流水线分拣检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

介绍GPT-o1:一系列解决困难问题( science, coding, and math )的推理模型

openai o1介绍 一、官方技术报告要点剖析实验1 benchmark分析实验2:和phd比赛技术细节&#xff1a;Chain of Thought的使用人类偏好评估Human preference evaluationsatety技术细节&#xff1a;隐藏思维链为监控模型提供了机会:)openai的几点conclusion 二、官方介绍剖析 Intro…

【C++】8.类和对象(6)

文章目录 5. 内部类6. 匿名对象7. 对象拷贝时的编译器优化 5. 内部类 如果一个类定义在另一个类的内部&#xff0c;这个内部类就叫做内部类。内部类是一个独立的类&#xff0c;跟定义在全局相比&#xff0c;他只是受外部类类域限制和访问限定符限制&#xff0c;所以外部类定义的…

【信号与系统】2、系统

1、线性系统 举例&#xff1a; &#xff08;1&#xff09;&#xff0c;是线性系统 &#xff08;2&#xff09;&#xff0c;是线性系统 &#xff08;3&#xff09;&#xff0c;微分器&#xff0c;是线性系统 &#xff08;4&#xff09;&#xff0c;积分器&#xff0c;是线性…

具身智能火了,但规模落地还需时间

作者 | 辰纹 来源 | 洞见新研社 “人工智能下一个浪潮是具身智能&#xff0c;即能理解、推理并与物理世界互动的智能系统”&#xff0c; 英伟达CEO黄仁勋去年在ITF World 2023半导体大会上的预测正在成为现实。 5月份&#xff0c;日本横滨召开的国际顶级机器人学术会议&…

专业120+总分400+中国科学技术大学843信号与系统考研经验中科大电子信息通信工程,生物医学工程,苏医工,真题,大纲,参考书。

经过将近一年的复习备考&#xff0c;专业843信号与系统120&#xff0c;总分400&#xff0c;顺利上岸朝思暮想的中科大。总结一些自己的备考经验&#xff0c;希望能给大家一些参考&#xff0c;少走弯路。首先讲一下大家最关注的专业课&#xff1a;843信号与系统 中科大843专业课…

动态规划算法:10.路径问题_地下城游戏_C++

目录 题目链接&#xff1a;174. 地下城游戏 - 力扣&#xff08;LeetCode&#xff09; 一、题目解析 题目&#xff1a;​编辑 解析&#xff1a; 二、算法原理 1、状态表示 2、状态转移方程 状态转移方程推理&#xff1a; 3、初始化 dp表初始化: 特殊位置初始化&#…

Vue学习(五)生命周期、组件

生命周期 生命周期&#xff0c;又名生命周期回调函数、生命周期函数、生命周期钩子。 生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数。 生命周期函数的名字不可更改&#xff0c;但是函数的具体内容是程序员根据需求写的。 生命周期中的this指向的是vm或者组件实例…

NFTScan | 09.16~09.23 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.09.16~ 2024.09.22 NFT Hot News 01/ ​DeGods 推出代币 DEGOD&#xff0c;用户可通过 DeGods、y00ts 或 DUST 进行转换 9 月 16 日&#xff0c;Solana NFT 项目 DeGods 推出代币…

综合题第二题(路由器的配置)

题目 如何计算子网掩码 我们可以观察到上图的IP地址后面有“/26”、“30”。我们都知道子网掩码是由多个连续“1”和多个连续“0”组成的&#xff0c;“、26”表示子网掩码的二进制表达中有26个1。 例如&#xff1a;156.95.9.128/26 1111 1111.1111 1111.1111 1111.1100 0000…