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.rhkb.cn/news/370844.html

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

相关文章

[c++] 可变参数模版

前言 可变参数模板是C11及之后才开始使用,学校的老古董编译器不一定能用 相信大家在刚入门c/c时都接触过printf函数 int printf ( const char * format, ... ); printf用于将数据格式化输出到屏幕上,它的参数非常有意思,可以支持任意数量,任意类型的多参数.而如果我们想实现类…

陶建辉当选 GDOS 全球数据库及开源峰会荣誉顾问

近日,第二十三届 GOPS 全球运维大会暨 XOps 技术创新峰会在北京正式召开。本次会议重点议题方向包括开源数据库落地思考、金融数据库自主可控、云原生时代下数据库、数据库智能运维、数据库安全与隐私、开源数据库与治理。大会深入探讨这些方向,促进了数…

方法引用详解

什么是方法引用?:针对于函数式接口中的抽象方法 为什么用方法引用?:避免代码的重复,简便书写,提高效率 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数…

服务器数据恢复—raid5阵列硬盘出现大量坏道的数据恢复案例

服务器存储数据恢复环境&故障: 一台DELL EqualLogic PS 4000存储中有一组由12块磁盘组建的raid5阵列,存储空间划分3个同等大小的卷,采用的VMFS文件系统。 两块硬盘指示灯亮黄色,raid5阵列崩溃,存储变得不可用。 服…

代码随想录——划分字母区间(Leetcode763)

题目链接 贪心 class Solution {public List<Integer> partitionLabels(String s) {int[] count new int[27];Arrays.fill(count,0);// 统计元素最后一次出现的位置for(int i 0; i < s.length(); i){count[s.charAt(i) - a] i;}List<Integer> res new Ar…

mac怎么压缩pdf文件大小,mac压缩pdf文件大小不改变清晰度

在数字化时代&#xff0c;pdf格式因其良好的兼容性和稳定性&#xff0c;成为了文档分享和传输的首选。然而&#xff0c;随着文件内容的丰富&#xff0c;pdf文件的体积也越来越大&#xff0c;给存储和传输带来了不小的困扰。本文将揭秘几种简单有效的pdf文件压缩方法&#xff0c…

多粒度封锁-封锁粒度、多粒度封锁模式

一、引言 1、若采用封锁技术实现并发控制&#xff0c;事务在访问数据库对象前要在数据库对象上加锁&#xff0c;为提高事务的并发程度&#xff0c;商用DBMS会采用一种多粒度封锁方法 2、事务可访问的数据库对象可以是逻辑单元&#xff0c;包括关系、关系中的元组、关系的属性…

【C++】map和set详解

目录 1. 关联式容器 2. 键值对pair 3. 树形结构的关联式容器 4. set 4.1 set的介绍 4.2 set的构造 4.3 set的迭代器 4.4 set的容量 4.5 set的常用函数 5. multiset 6. map 6.1 map的介绍 6.2 map的构造 6.3 map的迭代器 6.4 map的容量 6.5 map的operator[] 6.6…

Python入门 2024/7/6

目录 元组的定义和操作 字符串的定义和操作 字符串 字符串的替换 字符串的分割 字符串的规整操作&#xff08;去除前后空格&#xff09; 字符串的规整操作&#xff08;去掉前后指定字符串&#xff09; 操作 字符串的替换 字符串的分割 字符串的规整操作 统计字符串的…

ESP32——物联网小项目汇总

商品级ESP32智能手表 [文章链接] 用ESP32&#xff0c;做了个siri&#xff1f;&#xff01;开源了&#xff01; [文章链接]

JSP WEB开发(一) JSP语言基础

目录 JSP JSP简介&#xff1a; JSP页面 JSP运行原理 JSP脚本元素 JAVA程序片 局部变量 全局变量和方法的声明 全局变量 方法的声明 程序片执行特点 synchronized关键字 表达式 JSP指令标记 page指令 include指令 JSP动作标记 JSP动作元素include和include指令的…

测试环境:使用OpenSSL生成证书并配置Https

文章目录 需求1、安装OpenSSL1.1、安装包下载1.2、安装&#xff08;以window 64位为例&#xff09;1.3、配置环境变量&#xff08;非必须&#xff09; 2、生成证书2.1、新建文件夹2.2、生成根证书2.2.1、生成私钥2.2.2、生成根证书&#xff0c;并且自签名 2.3、服务端证书生成2…

前端根据目录生成模块化路由routes

根据约定大于配置的逻辑&#xff0c;如果目录结构约定俗成&#xff0c;前端是可以根据目录结构动态生成路由所需要的 route 结构的&#xff0c;这个过程是要在编译时 进行&#xff0c;生成需要的代码&#xff0c;保证运行时的代码正确即可 主流的打包工具都有对应的方法读取文…

设计模式之状态机模式

一、状态机模式介绍 状态机模式&#xff08;State Machine Pattern&#xff09;是一种用于描述对象行为的软件设计模式&#xff0c;属于行为型设计模式。在状态机模式中&#xff0c;对象的行为取决于其内部状态&#xff0c;并且在不同的状态下&#xff0c;对象可能会有不同的行…

Java信号量semaphore的原理与使用方法

Semaphore的基本概念 在Java中&#xff0c;Semaphore是位于java.util.concurrent包下的一个类。它的核心就是维护了一个许可集。简单来说&#xff0c;就是有一定数量的许可&#xff0c;线程需要先获取到许可&#xff0c;才能执行&#xff0c;执行完毕后再释放许可。 那么&…

Unity 简单载具路线 Waypoint 导航

前言 在游戏开发和导航系统中&#xff0c;"waypoint" 是指路径中的一个特定位置或点。它通常用于定义一个物体或角色在场景中移动的目标位置或路径的一部分。通过一系列的 waypoints&#xff0c;可以指定复杂的移动路径和行为。以下是一些 waypoint 的具体用途&…

YoloV8改进策略:Block改进|轻量实时的重参数结构|最新改进|即插即用(全网首发)

摘要 本文使用重参数的Block替换YoloV8中的Bottleneck&#xff0c;GFLOPs从165降到了116&#xff0c;降低了三分之一&#xff1b;同时&#xff0c;map50-95从0.937涨到了0.947。 改进方法简单&#xff0c;只做简单的替换就行&#xff0c;即插即用&#xff0c;非常推荐&#xf…

【leetcode52-55图论、56-63回溯】

图论 回溯【56-63】 46.全排列 class Solution:def permute(self, nums):result []self.backtracking(nums, [], [False] * len(nums), result)return resultdef backtracking(self, nums, path, used, result):if len(path) len(nums):result.append(path[:])returnfor i …

pdf怎么转换成图片格式文件,pdf文档怎么转换成图片格式

在数字化时代&#xff0c;pdf文件转换成图片格式是一种常见的操作&#xff0c;无论是在工作还是日常生活中&#xff0c;我们总会遇到需要将pdf文件转换为图片的需求。这可能是因为图片格式更易于分享、展示或编辑。那么&#xff0c;如何高效地将pdf转换成图片呢&#xff1f;本文…

QListWidget 缩略图IconMode示例

1、实现的效果如下&#xff1a; 2、实现代码 &#xff08;1&#xff09;头文件 #pragma once #include <QtWidgets/QMainWindow> #include "ui_QListViewDemo.h" enum ListDataType { ldtNone -1, ldtOne 0, ldtTwo 1, }; struct ListData…