当前位置: 首页 > news >正文

python学opencv|读取图像

【1】引言

前序学习了使用matplotlib模块进行画图,今天开始我们逐步尝试探索使用opencv来处理图片。

【2】学习资源

官网的学习链接如下:

OpenCV: Getting Started with Images

不过读起来是英文版,可能略有难度,所以另推荐一个中文版本的教程,请点击下述链接:

2. GUI 功能 - 图像入门 - 《OpenCV 中文文档 4.0.0》 - 书栈网 · BookStack

作为图像入门的开始教程,英文的官网和中文的博客内容上大同小异,但核心目的都是学会使用三个函数:cv.imread()cv.imshow()cv.imwrite()

细心地同学会发下,imread()和imshow()函数在matplotlib模块中同样可以调用。

【3】 函数解读

【3.1】imread()函数

打开下述链接,可以直达opencv官网对imread()函数的解读:

OpenCV: Image file reading and writing

此处应该理解核心话语:Loads an image from a file.

打开下述链接,可以直达matplotlib官网对imread()函数的解读:

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imread.html#matplotlib.pyplot.imread

这里的核心解释几乎完全一样: Read an image from a file into an array.

理解下来:imread()函数的功能是读取(read)图片。

【3.2】imshow()函数

打开下述链接,可以直达opencv官网对imshow()函数的解读:

OpenCV: High-level GUI

此处应该理解核心话语:

此处应该理解核心话语:Displays an image in the specified window.

打开下述链接,可以直达matplotlib官网对imread()函数的解读:

matplotlib.pyplot.imshow — Matplotlib 3.9.2 documentation

这里的核心解释略有不同,但实际上的效果几乎完全一样:Display data as an image, i.e., on a 2D regular raster.

理解下来:imread()函数的功能是显示(display)图片。

【3.3】imwrite()函数

打开下述链接,可以直达opencv官网对imwrite()函数的解读:

OpenCV: Image file reading and writing

此处应该理解核心话语:

此处应该理解核心话语:Saves an image to a specified file.

在matplotlib官网中没有找到该函数。

理解下来:imread()函数的功能是保存(write)图片。

【4】 代码解读 

在上述解读的基础上,我们尝试理解代码。

书栈网2. GUI 功能 - 图像入门 - 《OpenCV 中文文档 4.0.0》 - 书栈网 · BookStack

提供了一段非常简洁清晰的代码,我们对其进行解读。

    import numpy as npimport cv2 as cvfrom matplotlib import pyplot as pltimg = cv.imread('messi5.jpg',0)plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')plt.xticks([]), plt.yticks([]) # 隐藏 X 和 Y 轴的刻度值plt.show()

首先是引入画图和opencv模块:

import numpy as np #引入计算模块
import cv2 as cv #引入opencv模块
from matplotlib import pyplot as plt #引入画图模块

然后是读取图片和显示图片:

img = cv.imread('messi5.jpg', 0) #读取图片
plt.imshow(img, cmap='gray', interpolation='bicubic') #显示图片

读取图片使用了opencv模块,显示图片使用了matplotlib模块。

然后是直接输出图片:

plt.xticks([]), plt.yticks([])  # 隐藏 X 和 Y 轴的刻度值
plt.show() #输出图片

不过这段代码不能直接读取和输出图片,因为我们没有messi5.jpg。所以我改了一下,使用了自己的图片。

请注意,如果是使用pycharm编辑器,图片的应该和python程序存在同一个位置,也就是对应的project里面。比如我的程序名为testcv,程序位于D盘的位置是:

D:\python\workspace\pythonProject20\testcv.py

则图片也应该放在这个位置。

以下述图片为例:

fc3d8ba753e940bb9a0f6da5e138b764.png

图1

把图片放在对应位置后,把读取图片的代码改成下述形式:

img = cv.imread('2d3d01.png', 0) #读取图片

此时运行代码会获得新图片:

b9bdfb113a77494d85e2f931ec6c3861.png

图2

【5】代码改写

为了测试图片保存函数cv.imwrite(),我们尝试增加下述代码:

cv.imwrite('2d3d01-cv.png', img) #保存图片

运行代码后,我们看到文件夹了果然多了一张图片:

0d0439baad224a5489859e8461402a7d.png

图3

可见,imwrite()函数成功保存了图片。

【6】总结

开启了入门学习opencv的新篇章,学习了三个函数:cv.imread()cv.imshow()cv.imwrite()

的基本功能。

 

 

相关文章:

python学opencv|读取图像

【1】引言 前序学习了使用matplotlib模块进行画图,今天开始我们逐步尝试探索使用opencv来处理图片。 【2】学习资源 官网的学习链接如下: OpenCV: Getting Started with Images 不过读起来是英文版,可能略有难度,所以另推荐一…...

ffmpeg RTP PS推流

要实现 CRtpSendPs 类,使其能够将 H264 数据通过 RTP PS 流推送到指定的 URL,并支持 TCP 和 UDP 传输方式,您需要使用 FFmpeg 库。以下是该类的实现示例,包括必要的初始化、推流和退出函数。 步骤 初始化 FFmpeg 库:…...

Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)

tetris-demo A Tetris example written in Rust using Piston in under 500 lines of code 项目地址: https://gitcode.com/gh_mirrors/te/tetris-demo 项目介绍 "Tetris Example in Rust, v2" 是一个用Rust语言编写的俄罗斯方块游戏示例。这个项目不仅是一个简单…...

NUMA架构及在极速网络IO场景下的优化实践

NUMA技术原理 NUMA架构概述 随着多核CPU的普及,传统的对称多处理器(SMP)架构逐渐暴露出性能瓶颈。为了应对这一问题,非一致性内存访问(NUMA, Non-Uniform Memory Access)架构应运而生。NUMA架构是一种内存…...

Brain.js 用于浏览器的 GPU 加速神经网络

Brain.js 是一个强大的 JavaScript 库,它允许开发者在浏览器和 Node.js 环境中构建和训练神经网络 。这个库的目的是简化机器学习模型的集成过程,使得即使是没有深厚机器学习背景的开发者也能快速上手 。 概述 Brain.js 提供了易于使用的 API&#xff…...

Linux——用户级缓存区及模拟实现fopen、fweite、fclose

linux基础io重定向-CSDN博客 文章目录 目录 文章目录 什么是缓冲区 为什么要有缓冲区 二、编写自己的fopen、fwrite、fclose 1.引入函数 2、引入FILE 3.模拟封装 1、fopen 2、fwrite 3、fclose 4、fflush 总结 前言 用快递站讲述缓冲区 收件区(类比输…...

视觉感知与处理:解密计算机视觉的未来

文章目录 前言1. 计算机视觉的概述2. 计算机视觉的应用3. 运动感知与光流4. 人类视觉感知4.1 大脑中的视觉处理4.2 视觉缺陷与对比4.3 分辨率4.4 视觉错觉5. 图像采集与处理6. 图像处理流程7. 二值图像处理与分割8. 3D 机器视觉系统8.1 主动3D视觉8.2 立体视觉9. 商业机器视觉系…...

【大数据学习 | Spark-Core】广播变量和累加器

1. 共享变量 Spark两种共享变量:广播变量(broadcast variable)与累加器(accumulator)。 累加器用来对信息进行聚合,相当于mapreduce中的counter;而广播变量用来高效分发较大的对象&#xff0c…...

postgresql按照年月日统计历史数据

1.按照日 SELECT a.time,COALESCE(b.counts,0) as counts from ( SELECT to_char ( b, YYYY-MM-DD ) AS time FROM generate_series ( to_timestamp ( 2024-06-01, YYYY-MM-DD hh24:mi:ss ), to_timestamp ( 2024-06-30, YYYY-MM-DD hh24:mi:ss ), 1 days ) AS b GROUP BY tim…...

pywin32库 -- 读取word文档中的图形

文章目录 前置操作解析body中的图形解析页眉中的图形 前置操作 基于pywin32打开、关闭word应用程序; import pythoncom from win32com.client import Dispatch, GetActiveObjectdef get_word_instance():""" 获取word进程 实例"""py…...

GitLab使用示例

以下是从 新建分支开始,配置 GitLab CI/CD 的完整详细流程,涵盖每个步骤、配置文件路径和具体示例。 1. 新建分支并克隆项目 1.1 在 GitLab 上创建新分支 登录 GitLab,进入目标项目页面。依次点击 Repository > Branches。点击右上角 Ne…...

uniapp echarts tooltip formation 不识别html

需求: echarts 的tooltip 的域名太长,导致超出屏幕 想要让他换行 思路一: 用formation自定义样式实现换行 但是: uniapp 生成微信小程序, echart种的tooltip 的formation 识别不了html ,自定义样式没办…...

3D扫描对文博行业有哪些影响?

三维扫描技术对文博行业产生了深远的影响,主要体现在以下几个方面: 一、高精度建模与数字化保护 三维扫描技术通过高精度扫描设备,能够捕捉到文物的每一个细节,包括形状、纹理、颜色等,从而生成逼真的3D模型。这些模…...

面试(十一)

目录 一.IO多路复用 二.为什么有IO多路复用机制? 三.IO多路复用的三种实现方式 3.1 select select 函数接口 select 使用示例 select 缺点 3.2 poll poll函数接口 poll使用示例 poll缺点 3.3 epoll epoll函数接口 epoll使用示例 epoll缺点 四. 进程和线程的区别…...

React-useState的使用

useState 是 React 提供的一个 Hook,允许你在函数组件中添加和管理状态(state)。在类组件中,状态管理通常是通过 this.state 和 this.setState 来实现的,而在函数组件中,useState 提供了类似的功能。 基本…...

设计模式之破环单例模式和阻止破坏

目录 1. 序列化和反序列化2. 反射 这里单例模式就不多说了 23种设计模式之单例模式 1. 序列化和反序列化 这里用饿汉式来做例子 LazySingleton import java.io.Serializable;public class LazySingleton implements Serializable {private static LazySingleton lazySinglet…...

11.19c++面向对象+单例模式

编写如下类: class File{ FILE* fp }; 1:构造函数&#xff0c;打开一个指定的文件 2:write函数 向文件中写入数据 3&#xff1a;read函数&#xff0c;从文件中读取数据&#xff0c;以string类型返回 代码实现&#xff1a; #include <iostream>using namespace std;class…...

一文了解TensorFlow是什么

TensorFlow是一个开源的机器学习框架&#xff0c;由Google开发并维护。它提供了一个灵活且高效的环境&#xff0c;用于构建和训练各种机器学习模型。 TensorFlow的基本概念包括&#xff1a; 张量&#xff08;Tensor&#xff09;&#xff1a;TensorFlow中的核心数据结构&#x…...

如何做好一份技术文档?

打造出色技术文档的艺术 在当今技术驱动的世界中&#xff0c;技术文档扮演着至关重要的角色。它不仅是工程师和开发人员之间交流的桥梁&#xff0c;更是产品和技术成功的隐形推手。一份优秀的技术文档宛如一张精准的航海图&#xff0c;能够引导读者穿越技术的迷雾&#xff0c;…...

Linux和Ubuntu的关系

Linux和Ubuntu的关系&#xff1a; 1. Linux本身是内核&#xff0c;Ubuntu系统是基于Linux内核的操作系统。 2. Linux内核操作系统的构成&#xff1a; 内核、shell、文件系统、应用程序 -应用程序&#xff1a;文本编辑器等 -文件系统&#xff1a;文件存放在存储设备上的组织方…...

软件工程之静态建模

静态模型&#xff1a;有助于设计包、类名、属性和方法特征标记&#xff08;但不是方法体&#xff09;的定义&#xff0c;例如UML类图。 用例的关系&#xff1a; 扩展关系&#xff1a; 扩展关系允许一个用例&#xff08;可选&#xff09;扩展另一个用例&#xff08;基用例&…...

PICO VR串流调试Unity程序

在平时写Unity的VR程序的时候&#xff0c;需要调试自己写的代码&#xff0c;但是有的时候会发现场景过于复杂&#xff0c;不是HMD一体机能运行的&#xff0c;或者为了能够更方便的调试&#xff0c;不需要每次都将程序部署到眼睛里&#xff0c;这样非常浪费时间&#xff0c;对于…...

自媒体图文视频自动生成软件|03| 页面和结构介绍

代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; 视频图片生成器 一个基于 Python 和 Web 的工具&#xff0c;用于生成带有文字和语音的视频以及图片。支持多种尺寸、…...

深入浅出摸透AIGC文生图产品SD(Stable Diffusion)

hihi,朋友们,时隔半年(24年11月),终于能腾出时间唠一唠SD了🤣,真怕再不唠一唠,就轮不到SD了,技术更新换代是在是太快! 朋友们,最近(24年2月)是真的没时间整理笔记,每天都在疯狂的学习Stable Diffusion和WebUI & ComfyUI,工作实在有点忙,实践期间在飞书上…...

解析生成对抗网络(GAN):原理与应用

目录 一、引言 二、生成对抗网络原理 &#xff08;一&#xff09;基本架构 &#xff08;二&#xff09;训练过程 三、生成对抗网络的应用 &#xff08;一&#xff09;图像生成 无条件图像生成&#xff1a; &#xff08;二&#xff09;数据增强 &#xff08;三&#xff…...

CodeIgniter URL结构

CodeIgniter 的URL 结构设计得简洁且易于管理。通常遵循以下模式&#xff1a; http://<domain>/<index_page>/<controller>/<method>/<parameters> 下面是每个部分的详细说明&#xff1a; <domain>&#xff1a; 这是你的网站域名&#…...

从 App Search 到 Elasticsearch — 挖掘搜索的未来

作者&#xff1a;来自 Elastic Nick Chow App Search 将在 9.0 版本中停用&#xff0c;但 Elasticsearch 拥有你构建强大的 AI 搜索体验所需的一切。以下是你需要了解的内容。 生成式人工智能的最新进展正在改变用户行为&#xff0c;激励开发人员创造更具活力、更直观、更引人入…...

鸿蒙本地模拟器 模拟TCP服务端的过程

鸿蒙模拟器模拟TCP服务端的过程涉及几个关键步骤&#xff0c;主要包括创建TCPSocketServer实例、绑定IP地址和端口、监听连接请求、接收和发送数据以及处理连接事件。以下是详细的模拟过程&#xff1a; **1.创建TCPSocketServer实例&#xff1a;**首先&#xff0c;需要导入鸿蒙…...

Qt/C++基于重力模拟的像素点水平堆叠效果

本文将深入解析一个基于 Qt/C 的像素点模拟程序。程序通过 重力作用&#xff0c;将随机分布的像素点下落并水平堆叠&#xff0c;同时支持窗口动态拉伸后重新计算像素点分布。 程序功能概述 随机生成像素点&#xff1a;程序在初始化时随机生成一定数量的像素点&#xff0c;每个…...

Zookeeper学习心得

本人学zookeeper时按照此文路线学的 Zookeeper学习大纲 - 似懂非懂视为不懂 - 博客园 一、Zookeeper安装 ZooKeeper 入门教程 - Java陈序员 - 博客园 Docker安装Zookeeper教程&#xff08;超详细&#xff09;_docker 安装zk-CSDN博客 二、 zookeeper的数据模型 ZooKeepe…...

七牛云wordpress加速/软文推广案例500字

如果我们想去部署一些pod,或者服务,采用资源清单的方案,最为常用 资源清单可以理解为剧本,告诉我们该怎么做,k8s拿着剧本去执行,努力达到预期 剧本写在xxpod.yaml中 名称空间 集群 元数据 三种级别,根据适用性范围进行分类 pod : k8s中最下的组成部分 ,和pause 共享网络栈 (…...

免费做四年级题的网站/百度地图导航2022最新版

环境变量操作命令1、修改环境变量2、新建环境变量3、删除环境变量1、修改环境变量 环境变量的操作涉及到两个命令&#xff1a; setenv 和 saveenv 命令描述setenv用于设置或者修改环境变量的值saveenv用于保存修改后的环境变量 一般环境变量是存放在外部 flash 中的,uboot 启…...

自己做的网站可以买东西吗/班级优化大师怎么下载

简单工厂&#xff0c;抽象工厂&#xff0c;工厂方法的区别&#xff0c;UML类图&#xff0c;应用场景类和类的关系以及关系的强弱耦合度由弱到强的是关联关系&#xff1a;聚合关系&#xff1a;组合(Composition) 关系&#xff1a;类关系的总结类图UML说明-- -- -- -- -- -- ---&…...

专业做消防工程师的正规网站/深圳网站关键词优化推广

2019独角兽企业重金招聘Python工程师标准>>> 以项目名为myTest,当前类名为test(其中package com.sun.app)&#xff0c;test.txt为test同目录下为例&#xff1a; 全路径&#xff1a; 1.当前类test.class文件的URI目录 URL url test.class.getResource("")…...

电子商务网站建设认识/长尾关键词挖掘熊猫

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _15方法练习 {class Program{static void Main(string[] args){// 提示用户输入两个数字 计算这两个数字之间所有整数的和//1、用户只能输入…...

拖拽式建站源码/网络营销最主要的工具是

面向对象设计的过程就是抽象的过程&#xff0c;一般分为三步&#xff1a; &#xff08;1&#xff09;发现类&#xff0c;类定义了 对象将会用用的特征&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;。 &#xff08;2&#xff09;发现类的属性&#xff0c;对象…...