Python + OpenCV 开启图片、写入储存图片

这篇教学会介绍OpenCV 里imread()、imshow()、waitKey() 方法,透过这些方法,在电脑中使用不同的色彩模式开启图片并显示图片。

imread() 开启图片

使用imread() 方法,可以开启图片,imread() 有两个参数,第一个参数为档案的路径和名称,第二个参数可不填,表示以何种模式( mode ) 开启图片,开启的图片支援常见的jpg、png...等格式,下面是最基本开启图片的程式码。

import cv2
img = cv2.imread('meme.jpg')   # 开启图片,预设使用 cv2.IMREAD_COLOR 模式
cv2.imshow('oxxostudio', img)  # 使用名为 oxxostudio 的视窗开启图片
cv2.waitKey(0)                 # 按下任意键停止
cv2.destroyAllWindows()        # 结束所有图片视窗

如果设定第二个参数,就能使用不同的色彩模式开启图片,下面的程式码执行后,会以灰阶模式开启图片。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)  # 使用 cv2.IMREAD_GRAYSCALE 模式
# img = cv2.imread('meme.jpg', 2) # 也可使用数字代表模式
cv2.imshow('oxxostudio', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

imshow() 显示图片

在上面的程式码中,使用了imshow() 的方法显示图片,imshow() 包含两个参数,第一个参数为字串,表示要开启图片的视窗名称,第二个参数为使用imread()读取的图片

waitKey() 等待多久关闭

使用imshow() 方法时会搭配waitKey(),waitKey() 表示等待与读取使用者按下的按键,包含一个单位为「毫秒」的参数,如果设定0 表示持续等待至使用者按下按键为止,下方的程式码设定waitKey 的参数为2000,表示两秒后会关闭图片视窗( 两秒内如果按下q 就会中止计时并关闭视窗)。

如果遇到视窗无法关闭的状况,可以使用destroyAllWindows() 的方法关闭所有视窗,或使用destroyWindow(name) 关闭指定名称的视窗。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)  # 使用 cv2.IMREAD_GRAYSCALE 模式
cv2.imshow('oxxostudio', img)
cv2.waitKey(2000)       # 等待两秒 ( 2000 毫秒 ) 后关闭图片视窗
cv2.destroyAllWindows()

色彩模式数字对照表

写入并储存图片

这篇教学会介绍OpenCV 里的imwrite() 方法,实现将图片另存新档( 也可转档) 的功能。

imwrite() 写入并储存图片

使用imwrite() 方法,可以将处理好的资料内容写入并储存为图片,imwrite() 有三个参数,第一个参数为档案的路径和名称,第二个参数为要写入的资料内容,第三个参数为图片压缩品质的设定

下方的程式码执行后,会先用「灰阶模式」开启一张图片,然后再将其存档为压缩品质80 的jpg 和套用预设值的png 图档。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)   # 以灰阶模式开启图片
cv2.imwrite('oxxostudio_2.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 80])  # 存成 jpg
cv2.imwrite('oxxostudio_3.png', img)  # 存成 png

储存阵列产生的图片

在Python 里,图片可以使用「三维阵列」的方式表现(长宽各多少个像素、每个像素里包含的颜色资讯是什么),因此如果提供特定格式的三维阵列的资料,就能让OpenCV 画出图形。

下面的范例使用numpy 函式库,快速产生500x500,每个项目为[0,0,0] 的三维阵列,接着再让阵列中间的正方形区域的项目设定为[0,0,255],呈现的就是一张500x500 大小,黑色背景,中间200x200 红色正方形的图形,最后使用imwrite() 的方法,就能储存这张图片。

注意!OpenCV 里的颜色为「BGR」,并非RGB,颜色色码为0~255

import cv2
import numpy as np
img = np.zeros((500,500,3), dtype='uint8')   # 快速产生 500x500,每个项目为 [0,0,0] 的三维阵列
img[150:350, 150:350] = [0,0,255]  # 将中间 200x200 的每个项目内容,改为 [0,0,255]
cv2.imwrite('oxxostudio.jpg', img)       # 存成 jpg
cv2.imshow('oxxostudio', img)            # 显示图片
cv2.waitKey(0)                           # 按下任意键停止
cv2.destroyAllWindows()

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

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

相关文章

基于顺序表的通讯录实现

一、前言 基于已经学过的顺序表,可以实现一个简单的通讯录。 二、通讯录相关头文件 //Contact.h #pragma once#define NAME_MAX 20 #define TEL_MAX 20 #define ADDR_MAX 20 #define GENDER_MAX 20typedef struct PersonInfo {char name[NAME_MAX];char gender[G…

Hugging face Transformers(2)—— Pipeline

Hugging Face 是一家在 NLP 和 AI 领域具有重要影响力的科技公司,他们的开源工具和社区建设为NLP研究和开发提供了强大的支持。它们拥有当前最活跃、最受关注、影响力最大的 NLP 社区,最新最强的 NLP 模型大多在这里发布和开源。该社区也提供了丰富的教程…

C++友元函数和友元类的使用

1.友元介绍 在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或实现特定的功能。 友元可以分为两种类型:类友元和函数友元。…

高级计算机体系结构--期末教材复习

Chap2 性能评测和并行编程性能评测并行编程为什么需要三次 barrier改进方法 Chap3 互连网络交换和路由二维网格中 XY 路由 死锁、活锁及饿死死锁避免的方法:虚通道、转弯模型二维网格中最小 西向优先、北向最后和负向优先算法转弯模型:超立方体的部分自适…

前端面试题19(vue性能优化)

Vue.js应用的性能优化是一个多方面的过程,涉及初始化加载、运行时渲染以及用户交互等多个环节。以下是一些关键的Vue性能优化策略,包括详细的说明和示例代码: 1. 懒加载组件 对于大型应用,可以使用懒加载来减少初始加载时间。Vu…

JavaWeb----JSPJSTL

目录 JSP显隐注释在JSP中写java程序JSP的指令标签JSP中的四大域对象简易版用户登录EL表达式 JSTL条件动作标签if标签 choose\when\otherwise标签迭代标签格式化动作标签 用户登录实例查看是否安装了mysql用户登录界面后台实现 JSP JSP全名是Java Server Pages,它是建…

电机控制杂谈——增量式的预测电流控制的优势在哪?

1.前言 前几天看到这么个问题。“模型预测控制如何消除静态误差” 评论说用增量式的预测控制。 这个回答让我想起来我大四下看的这篇论文。现在都一百多被引用了。 但是苦于当时能力有限,没办法复现这个文章。 所以现在想重新验证一下。 2.静态误差和电机磁链有…

[CP_AUTOSAR]_分层软件架构_内容详解

目录 1、软件分层内容1.1、Microcontroller Abstraction Layer1.2、ECU Abstraction Layer1.2.1、I/O HW Abstraction1.2.2、Communication Hardware Abstraction1.2.3、Memory Hardware Abstraction1.2.4、Onboard Device Abstraction1.2.5、Crypto Hardware Abstraction 1.3、…

Apache Seata分布式事务启用Nacos做配置中心

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Seata分布式事务启用Nacos做配置中心 Seata分布式事务启用Nacos做配置中心 项目地址 本文作…

便携式气象站:探索自然的智慧伙伴

在探索自然奥秘、追求科学真理的道路上,气象数据始终是我们不可或缺的指引。然而,传统的气象站往往庞大而笨重,难以在偏远地区或移动环境中灵活部署。 便携式气象站,顾名思义,是一种小巧轻便、易于携带和安装的气象观测…

VitePress美化

参考资料: https://blog.csdn.net/weixin_44803753/article/details/130903396 https://blog.csdn.net/qq_30678861/category_12467776.html 站点信息修改 首页部分的修改基本都在.vitepress/config.mts,这个文件内修改。 title 站点名称 description 描述 top…

Vben:表格的表头和表格的内容对不齐,以及解决方法

文章目录 一、问题描述二、解决方法 一、问题描述 基于Vue-Vbne-admin框架进行前端开发的时候,调用表格useTable函数实现表格之后,发现表格的表头和表格的内容对不齐。如下图所示。针对这种情况,本文记录了解决方法。 调用的模块如下&#x…

【力扣 - 每日一题】3099. 哈沙德数 | 模拟 (Go/C++)

题目内容 如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数 x 。如果 x 是 哈沙德数 ,则返回 x 各个数位上的数字之和,否则,返回 -1 。 示例 1&#xff1…

使用 ESP32-WROOM + DHT11 做个无屏温湿度计

最近梅雨天,有个房间湿度很大,而我需要远程查看温湿度,所以无所谓有没有显示屏,某宝上的温湿度计都是带屏的,如果连WIFI查看温湿度操作也比较麻烦,还需要换电池,实在不能满足我的需求&#xff0…

SpringBoot新手快速入门系列教程四:创建第一个SringBoot的API

首先我们用IDEA新建一个项目,请将这些关键位置按照我的设置设置一下 接下来我将要带着你一步一步创建一个Get请求和Post请求,通过客户端请求的参数,以json格式返回该参数{“message”:"Hello"} 1,先在IDE左上角把这里改为文件模式…

笔记:SpringBoot+Vue全栈开发

笔记:SpringBootVue全栈开发 1. 开发环境热部署2. SpringBoot RestController的使用3. SpringBoot实现文件上传4. 配置拦截器5. Restful服务Swagger6. 使用MyBatis-Plus进行数据库操作7. 多表查询、条件查询及分页查询 1. 开发环境热部署 使用spring-boot-devtools…

泛微开发修炼之旅--31海康威视综合安防管理系统组织机构同步代码方案及源码

31海康威视综合安防管理系统组织机构同步代码方案及源码 一、使用场景 我们在一个项目中有一个和海康威视综合安防管理系统进行组织机构同步接口,接下来我们看下实现的源码 31海康威视综合安防管理系统组织机构同步代码方案及源码

【qt】如何获取本机的IP地址?

需要用到这个类QHostInfo和pro里面添加network模块 用这个类的静态函数forName()来获取该主机名的信息 返回的就是这个类 这个QHostInfo类就包括主机的IP地址信息 用静态函数addresses()来获取 返回的是一个QHostAddress的容器 QList<QHostAddress>addrList hostIn…

【车载开发系列】GIT安装详细教程

【车载开发系列】GIT安装详细教程 【车载开发系列】GIT安装详细教程 【车载开发系列】GIT安装详细教程一. GIT软件概念二. GIT安装步骤三. GIT安装确认三. GIT功能使用1&#xff09;Git Bash2&#xff09;Git CMD3&#xff09;Git FAQs4&#xff09;Git GUI 一. GIT软件概念 G…

[CTF]-PWN:House of Banana堆块题型综合分析

搭配largebin attack&#xff1a; 例题&#xff08;ISCC2024 heapheap)&#xff1a; 版本&#xff1a;glibc2.31 知识点&#xff1a;largebin attack、house of banana、uaf 查看保护 查看ida delete存在uaf漏洞 largebin attack手法&#xff1a; #创建4个堆块&#xff0…