Python OpenCV图像处理与深度学习:Python OpenCV入门-图像处理基础

Python OpenCV入门实践:图像处理基础

学习目标

通过本课程,学员们将了解OpenCV的基本概念、安装方法,掌握如何使用Python和OpenCV进行基本的图像处理操作,包括图像的读取、显示、保存以及简单的图像变换。

相关知识点

  • Python OpenCV图像处理基础

学习内容

1 Python OpenCV图像处理基础

1.1 OpenCV简介及其安装
1.1.1 OpenCV简介

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV被广泛应用于各种计算机视觉应用,如图像和视频分析、人脸识别、物体识别、医学图像分析、增强现实等。它支持多种编程语言,包括Python、C++和Java,以及多种操作系统,如Windows、Linux、MacOS、Android和iOS。

OpenCV的开发始于1999年,由Intel公司发起,旨在加速计算机视觉应用的开发。2000年,OpenCV 1.0版本发布。随着时间的发展,OpenCV不断吸收新的算法和技术,成为计算机视觉领域不可或缺的工具之一。OpenCV 2.0版本引入了更多的高级功能,如机器学习模块。2012年,OpenCV 3.0版本发布,增加了更多的图像处理和视频分析功能。最新的OpenCV 4.0版本进一步优化了性能,增加了对深度学习的支持。

1.1.2 OpenCV的安装

安装OpenCV非常简单,特别是使用Python时。可以通过Python的包管理工具pip来安装OpenCV。打开命令行工具,输入以下命令:

%pip install opencv-python

如果需要使用OpenCV的额外模块,如SIFT、SURF等,可以安装opencv-contrib-python包:

%pip install opencv-contrib-python

安装完成后,可以在Python脚本中通过import cv2来导入OpenCV库。

1.2 图像的基本操作
1.2.1 读取图像

执行以下指令获取测试图片。

!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/188467642fa811f0b2fdfa163edcddae/example.jpg

在OpenCV中,读取图像非常简单。使用cv2.imread()函数可以读取图像文件。该函数接受一个文件路径作为参数,并返回一个NumPy数组,该数组表示图像的像素值。

import cv2# 读取图像
image = cv2.imread('example.jpg')# 检查图像是否成功读取
if image is None:print("Error: Could not read image.")
else:print("Image successfully read.")
1.2.2 显示图像

读取图像后,可以使用cv2.imshow()函数来显示图像。该函数接受两个参数:窗口名称和图像数组。

import cv2# 读取图像
image = cv2.imread('example.jpg')# 显示图像
cv2.imshow('Image', image)# 等待用户按键
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()
1.2.3 保存图像

处理完图像后,可以使用cv2.imwrite()函数将图像保存到文件。该函数接受两个参数:文件路径和图像数组。

import cv2# 读取图像
image = cv2.imread('example.jpg')# 保存图像
cv2.imwrite('save.jpg', image)
1.3 图像变换
1.3.1 图像灰度化

图像灰度化是将彩色图像转换为灰度图像的过程。在OpenCV中,可以使用cv2.cvtColor()函数来实现图像的灰度化。该函数接受两个参数:输入图像和颜色转换代码。

import cv2
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('example.jpg')# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 将 BGR 格式转换为 RGB 格式,以适配 matplotlib 的显示
gray_image = cv2.cvtColor(gray_image, cv2.COLOR_BGR2RGB)
# 显示灰度图像
plt.imshow(gray_image)
plt.axis('off')
plt.show()
1.3.2 图像缩放

图像缩放是改变图像大小的过程。在OpenCV中,可以使用cv2.resize()函数来实现图像的缩放。该函数接受多个参数,包括输入图像、输出图像的大小、插值方法等。

import cv2# 读取图像
image = cv2.imread('example.jpg')# 缩放图像
resized_image = cv2.resize(image, (800, 600))
# 将 BGR 格式转换为 RGB 格式,以适配 matplotlib 的显示
resized_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB)
# 显示缩放后的图像
plt.imshow(resized_image)
plt.show()
1.3.3 图像旋转

图像旋转是将图像绕某个点旋转一定角度的过程。在OpenCV中,可以使用cv2.getRotationMatrix2D()cv2.warpAffine()函数来实现图像的旋转。

import cv2
import numpy as np# 读取图像
image = cv2.imread('example.jpg')# 获取图像的中心点
height, width = image.shape[:2]
center = (width // 2, height // 2)# 定义旋转角度和缩放比例
angle = 45
scale = 1.0# 获取旋转矩阵
rotation_matrix = cv2.getRotationMatrix2D(center, angle, scale)# 应用旋转
rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height))
# 将 BGR 格式转换为 RGB 格式,以适配 matplotlib 的显示
rotated_image = cv2.cvtColor(rotated_image, cv2.COLOR_BGR2RGB)
# 显示旋转后的图像
plt.imshow(rotated_image)
plt.axis('off')
plt.show()

通过本课程的学习,学员们将掌握OpenCV的基本使用方法,能够进行图像的读取、显示、保存以及简单的图像变换。这些基础知识将为后续更复杂的图像处理和计算机视觉任务打下坚实的基础。

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

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

相关文章

【lua】Lua 入门教程:从环境搭建到基础编程

Lua 入门教程:从环境搭建到基础编程 Lua 是一种轻量级、可扩展的脚本语言,广泛应用于游戏开发(如《魔兽世界》《Roblox》)、嵌入式系统、Web 后端等领域。它语法简洁、运行高效,非常适合作为编程入门语言或辅助开发工…

MySQL索引事务(未完成)

索引的相关操作1.查看索引show index from 表名;2.创建索引create index 索引名字 on 表名(列名);创建索引,是一个危险操作创建索引的时候,需要针对现有的数据,进行大规模的重新整理如果当前表是一个空表,或者数据不多&#xff0c…

Docker一键快速部署压测工具,高效测试 API 接口性能

以下是对该压测工具的简单介绍: 这是一个简易的在线压测工具,可以对 API 接口/页面、websocket服务等进行压力测试,检验服务的并发能力使用 thinkphp ant design pro 构建,压测能力驱动基于 wrk 、 php 多进程协程实现支持在线授…

前端缓存问题详解

前端缓存是提升网页性能和用户体验的重要手段,但也常导致资源更新不及时等问题。以下是关于前端缓存的核心知识点和解决方案: 一、缓存类型及工作原理HTTP缓存(最核心) 强缓存:直接从本地读取,不请求服务器…

webpack升级

一、调研对比维度Webpack 4 状态Webpack 5 改进与优势构建速度较慢,增量构建效率低✅ 引入 持久化缓存(filesystem cache),二次构建速度提升高达 90%Tree Shaking支持基础 Tree Shaking,需手动配置✅ 更强的 Tree Shak…

Logstash数据迁移之es-to-kafka.conf详细配置

在 Logstash 中配置从 Elasticsearch (ES) 读取数据并输出到 Kafka 是一个相对高级但强大的用法,通常用于数据迁移、重新索引、或构建新的数据管道。 下面我将详细解释配置文件的各个部分和细节。 核心配置文件结构 (es-to-kafka.conf) 一个完整的配置文件主要包含三…

在OracleLinux9.4系统上静默滚动打补丁安装Oracle19c

OracleLinux9.4系统 安装Oracle19c 文章目录OracleLinux9.4系统 安装Oracle19c一、安装准备1、yum安装预检查需要的包2、系统资源二、滚动安装一、安装准备 1、yum安装预检查需要的包 yum install libnsl yum install -y oracle-database-preinstall-19c # 最新的unzip yum i…

Android原生HttpURLConnection上传图片方案

创建上传方法object FormUploader {private val BOUNDARY "Boundary-" System.currentTimeMillis()private const val LINE_FEED "\r\n"Throws(IOException::class)fun uploadImage(url: String, imageFile: File, params: MutableMap<String?, Str…

落叶清扫机器人cad+三维图+设计说明书

摘 要 城市公共场所、校园等环境中&#xff0c;落叶的清扫一直是一个繁琐而耗时的任务。传统的人工清扫方式不仅效率低下&#xff0c;还存在人力浪费和安全隐患等问题。因此&#xff0c;研发一款能够自主完成落叶清扫任务的机器人成为了当今研究的热点之一。随着科技的不断进…

国别域名的SEO优势:是否更利于在当地搜索引擎排名?

当你盯着搜索引擎结果页发呆时&#xff0c;有没有想过——凭什么那个.jp域名的网站能排在.ca前面&#xff1f;别扯什么内容质量&#xff0c;上周帮客户优化新加坡市场时&#xff0c;亲眼见着两个内容相似度90%的页面&#xff0c;.sg域名比.com.au在Google Singapore上高出3个排…

动态配置最佳实践:Spring Boot 十种落地方式与回滚审计指南(含实操与避坑)

作为一名Spring Boot开发者&#xff0c;正在运维一个高可用微服务系统&#xff1a;业务需求变化频繁&#xff0c;需要实时调整配置如数据库连接或日志级别&#xff0c;但每次修改都得重启应用&#xff0c;造成服务中断和用户投诉。这不是小麻烦&#xff0c;而是配置管理的痛点—…

vue社区网格化管理系统(代码+数据库+LW)

摘要 随着城市化进程的加快&#xff0c;社区管理的复杂性逐渐增大&#xff0c;传统的管理模式已无法满足现代社区管理的需求。社区网格化管理系统作为一种新的管理模式&#xff0c;通过将社区划分为多个网格单元&#xff0c;使得管理更加精细化、智能化和高效化。本论文基于Sp…

使用EasyExcel实现Excel单元格保护:自由锁定表头和数据行

使用EasyExcel实现Excel单元格保护&#xff1a;锁定表头和第二行数据 前言 在日常开发中&#xff0c;我们经常需要导出Excel文件&#xff0c;有时还需要对Excel中的某些单元格进行保护&#xff0c;防止用户误修改。本文将介绍如何使用EasyExcel 4.0.3实现锁定Excel表头和第二行…

dify docker知识库topk最大值参数配置

1 问题说明 dify构建RAG知识库过程中&#xff0c;通过会遇到一些默认配置不能解决的问题。 比如topk&#xff0c;topk默认最大10&#xff0c;对语义模糊的检索&#xff0c;目标文档可能没进前10&#xff0c;出现在10-30区间。 所以&#xff0c;需要调整topk最大值参数。 # T…

SRE命令行兵器谱之一:精通top/htop - 从性能“体检”到瓶颈“解剖”

SRE命令行兵器谱之一:精通top/htop - 从性能“体检”到瓶颈“解剖” SRE的“战场”:真实故障场景 下午三点,监控系统告警:“核心API服务响应时间(P99)飙升至5秒”。用户已经开始在群里抱怨接口超时。这是一个典型的线上性能问题,每一秒的延迟都在影响用户体验和公司收…

一、Git与Gitee常见问题解答

Git与Gitee常见问题解答 Git相关问题 Q1: 什么是Git&#xff1f; A: Git是一个分布式版本控制系统&#xff0c;由Linux之父Linus Torvalds开发。它能够跟踪文件的变更历史&#xff0c;支持多人协作开发&#xff0c;是现代软件开发中不可或缺的工具。 Q2: Git的三个区域是什么&a…

kubernetes服务质量之QoS类

一、QoS类 Kubernetes的QoS&#xff08;Quality of Service&#xff09;类别允许您指定可用于应用程序的可用资源数量&#xff0c;以便更好地控制应用程序的可用性。它还允许您限制特定应用程序的资源使用率&#xff0c;以帮助保护系统的稳定性和性能。 Kubernetes 创建 Pod 时…

Redis--Lua脚本以及在SpringBoot中的使用

前言、为什么要用 Lua&#xff1f;多步操作合并为一步&#xff0c;保证原子性。减少网络通信次数。下推逻辑到 Redis&#xff0c;提高性能。一、Redis 使用 Lua 脚本的两种方式方式一&#xff1a;使用 --eval 执行脚本文件这种方式 需要先写一个 Lua 文件。&#x1f4cc; 示例&…

基于 C 语言的网络单词查询系统设计与实现(客户端 + 服务器端)

一、项目概述本文将介绍一个基于 C 语言开发的网络单词查询系统&#xff0c;该系统包含客户端和服务器端两部分&#xff0c;支持用户注册、登录、单词查询及历史记录查询等功能。系统采用 TCP socket 实现网络通信&#xff0c;使用 SQLite 数据库存储用户信息、单词数据及查询记…

《JAVA EE企业级应用开发》第一课笔记

《JAVA EE企业级应用开发》第一课笔记 文章目录《JAVA EE企业级应用开发》第一课笔记课程主题&#xff1a;三层架构与SSM框架概述一、核心架构&#xff1a;三层架构 (MVC)1. 表现层 (Presentation Layer)2. 业务逻辑层 (Business Logic Layer)3. 数据持久层 (Data Persistence …