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

openCV—图像入门(python)

目录

目标

使用OpenCV

显示图像

写入图像

总结使用

使用Matplotlib


注:图片后续补充

目标

在这里,你将了解如何使用Python编程语言中的OpenCV库,实现读取、显示和保存图像的功能。具体来说,你将学习以下函数的用法:cv.imread() 用于读取图像,cv.imshow() 用于显示图像,cv.imwrite() 用于将图像保存到本地文件系统中。

如果你有兴趣,还可以学习如何使用Matplotlib库来显示图像,这也是一种常见的图像显示方式。

在使用OpenCV库读取图像时,需要使用cv.imread()函数。读取图像时,需要提供图像文件的路径或文件名,函数将返回一个图像对象。

使用OpenCV


除此之外,cv.imread()函数还可以接收一个额外的参数,用于指定图像的读取方式。具体来说,可以使用以下三个标志:

  • cv.IMREAD_COLOR:用于加载彩色图像,会忽略任何图像的透明度,这也是默认标志;
  • cv.IMREAD_GRAYSCALE:用于以灰度模式加载图像;
  • cv.IMREAD_UNCHANGED:用于加载图像,包括alpha通道。

此外,还可以传递整数1、0或-1来表示这三个标志。

下面是使用cv.imread()函数读取图像的示例代码:

import numpy as np
import cv2 as cv#加载彩色灰度图像
img = cv.imread('messi5.jpg', 0)

在这里:0代表读取灰度图像,即将彩色图像转换为灰度图像
另外:

  1. cv.IMREAD_COLOR 或 1:读取彩色图像,忽略 alpha 通道,相当于使用默认值 1。
  2. cv.IMREAD_GRAYSCALE 或 0:读取灰度图像。
  3. cv.IMREAD_UNCHANGED 或 -1:读取原始图像,包括 alpha 通道(如果有)。

下面为效果图(没有报错代表读取成功):

警告

如果在使用OpenCV库读取图像时,提供的图像路径错误,不会引发任何错误,但是打印读取的图像对象时将返回None。换句话说,即使图像路径错误,程序也不会崩溃或抛出异常,而是返回一个空对象。

因此,为了确保程序能够正确读取图像,建议在提供图像路径之前,先检查路径是否正确,以避免意外的错误。

显示图像

使用函数**cv.imshow()**可以在窗口中显示图像。该函数会自动根据图像尺寸调整窗口大小。

在调用**cv.imshow()**函数时,第一个参数是窗口名称,是一个字符串类型的值。第二个参数是要显示的图像对象。你可以创建多个窗口,并指定不同的窗口名称,以显示多个图像。

import cv2 as cv#加载彩色灰度图像
img = cv.imread('messi5.jpg',0)cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()

窗口的屏幕截图如下所示:

在使用OpenCV库显示图像时,我们需要使用函数cv.imshow()。该函数需要一个窗口名称作为第一个参数,并需要传递要显示的图像作为第二个参数。调用该函数后,可以使用**cv.waitKey()**函数等待用户交互事件。

cv.waitKey()函数是一个键盘绑定函数,它等待指定毫秒数的时间,等待用户按下任何键或交互事件发生。

如果时间到期时仍未发生交互事件,则程序将继续执行。如果将0作为参数传递,则程序将无限等待用户交互事件。该函数还可以用于检测特定按键的按下事件,例如按下键盘上的字母a。需要注意的是,为了确保图像能够正确显示,必须在显示图像后使用cv.waitKey()**函数。

cv.destroyAllWindows()函数可以用于销毁我们创建的所有窗口,而cv.destroyWindow()函数可以销毁特定的窗口。

需要注意的是,在某些情况下,可以在创建一个空的窗口之后再将图像加载到该窗口中。这时,可以使用cv.namedWindow()**函数来设置窗口的属性,例如是否可以调整窗口大小。如果需要显示的图像尺寸过大或需要在窗口中添加跟踪栏时,可以使用该函数来设置窗口大小。

下面是使用OpenCV库显示图像的示例代码:

cv.namedWindow('image',cv.WINDOW_NORMAL)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()

效果图

写入图像

在使用OpenCV库保存图像时,需要使用函数cv.imwrite()。该函数需要两个参数:第一个参数是要保存的文件名,第二个参数是要保存的图像对象。

具体来说,你可以像这样调用cv.imwrite()函数:cv.imwrite('messigray.png',img)。这将会把图像以PNG格式保存在工作目录中,文件名为'messigray.png'。

需要注意的是,cv.imwrite()函数可以保存多种不同格式的图像,例如PNG、JPEG、BMP等。在调用该函数时,需要根据需要指定要保存的图像格式,即文件扩展名。

总结使用

下面的代码演示了如何使用OpenCV库加载、显示和保存图像。具体来说,它加载一张灰度图像,将其显示在屏幕上,等待用户按下键盘按键。如果用户按下's'键,则程序将保存图像到本地,并退出;如果用户按下'ESC'键,则程序将直接退出而不保存图像。

import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg',0)
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27:         # 等待ESC退出cv.destroyAllWindows()
elif k == ord('s'): # 等待关键字,保存和退出cv.imwrite('messigray.png',img)cv.destroyAllWindows()

警告

如果使用的是64位计算机,则必须k = cv.waitKey(0)按如下所示修改行:k = cv.waitKey(0) & 0xFF。

这是因为在64位计算机上,**cv.waitKey()**函数返回一个64位整数,但是ASCII码值只有8位。因此,将返回值与0xFF(即255)进行按位与运算,可以保留返回值的低8位,这是ASCII码的有效范围。

这种修改可以确保在64位计算机上正确读取键盘输入,并避免潜在的兼容性问题。

使用Matplotlib

Matplotlib是一款Python的绘图库,可以提供多种绘图方法,方便进行数据可视化和图像处理。在接下来的学习中,你将学习到如何使用Matplotlib库来展示和处理图像。通过Matplotlib,你可以方便地对图像进行缩放、保存等操作。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

窗口的屏幕截图如下所示: 

 

另外,有空可看看:

Matplotlib提供了许多绘图选项,可以根据需求进行图像的处理和展示。如果需要了解更多的绘图选项,可以参考Matplotlib文档以获取更多详细信息,其中会涵盖许多实用的技巧和方法。

需要注意的是:

当使用OpenCV加载彩色图像时,它处于BGR模式,而Matplotlib以RGB模式显示图像。因此,如果使用OpenCV加载彩色图像,那么在Matplotlib中将无法正确显示彩色图像。如果遇到这种情况,可以采用一些转换方法来将图像从BGR模式转换为RGB模式,以便正确地在Matplotlib中显示彩色图像。关于这个问题,我们将在接下来的练习中进行更详细的讨论。

相关文章:

openCV—图像入门(python)

目录 目标 使用OpenCV 显示图像 写入图像 总结使用 使用Matplotlib 注:图片后续补充 目标 在这里,你将了解如何使用Python编程语言中的OpenCV库,实现读取、显示和保存图像的功能。具体来说,你将学习以下函数的用法&#xf…...

关于一个Java程序员马上要笔试了,临时抱佛脚,一晚上恶补45道简单SQL题,希望笔试能通过

MySQL随手练 / DQL篇 MySQL随手练——DQL篇 题目网盘下载:https://pan.baidu.com/s/1Ky-RJRNyfvlEJldNL_yQEQ?pwdlana 初始数据 表 course 表 student 表 teacher 表 sc 答案 :) —> :( —> :) 1. 查询 "01"课程比"02"课程成绩高的学生…...

PyTorch深度学习实战

本专栏分为两大部分,专栏内容如下: 第1部分 探讨PyTorch与其他深度学习框架的区别。 如何在PyTorch Hub中下载和运行模型。 PyTorch的基本构建组件——张量 展示不同类型的数据如何被表示为张量,以及深度学习模型期望构造什么样的张量。 梯度…...

leetcode 1011. Capacity To Ship Packages Within D Days(D天内运送包裹的容量)

数组的每个元素代表每个货物的重量,注意这个货物是有先后顺序的,先来的要先运输,所以不能改变这些元素的顺序。 要days天内把这些货物全部运输出去,问所需船的最小载重量。 思路: 数组内数字顺序不能变,就…...

支持向量机SVM详细原理,Libsvm工具箱详解,svm参数说明,svm应用实例,神经网络1000案例之15

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的股票价格预测 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型&a…...

Mac 上搭建 iOS WebDriverAgent 环境

文章目录Mac环境搭建配置 Xcode 生成 WDA常见问题brew 安装失败Mac环境搭建 macOS 系统电脑:12.6.2 Xcode:14.0.1(xcodebuild -version) appium Desktop:1.21.0 (下载链接) Appium Desktop 1.22.0 ,从该版…...

python学习笔记之例题篇NO.3

获得用户输入的一个整数N,输出N中所出现不同数字的和。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬ s list(set(list(input())))# ① r…...

【Kubernetes】第七篇 - Service 服务介绍和使用

一,前言 上一篇,通过配置一个 Deployment 对象,在内部创建副本集对象,副本集帮我们创建了 3 个 pod 副本 由于 pod 存在 IP 漂移现象,pod 的创建和重启会导致 IP 变化; 本篇,介绍 Service 服…...

Linux 终端复用器Tmux

目录 Tmux讲解 配置tmux 配置tmux会话 配置tmux窗口(在会话界面进行配置) 配置tmux面板 配置窗口共享同步 Tmux讲解 RHEL5/6/7使用的是screen软件包 RHEL8使用的是tumx软件包(功能更强大,更易用) tmux的三个基本…...

Hadoop集群模式安装(Cluster mode)

1、Hadoop源码编译 安装包、源码包下载地址 Index of /dist/hadoop/common/hadoop-3.3.0为什么要重新编译Hadoop源码? 匹配不同操作系统本地库环境,Hadoop某些操作比如压缩、IO需要调用系统本地库(*.so|*.dll) 修改源码、重构源码 如何…...

PTA L1-054 福到了(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: “福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每…...

python -- 魔术方法

魔术方法就算定义在类里面的一些特殊的方法 特点:这些func的名字前面都有两个下划线 __new__方法 相当于一个类的创建一个对象的过程 __init__方法 相当于为这个类创建好的对象分配地址初始化的过程 __del__方法 一个类声明这个方法后,创建的对象如果…...

「JVM 编译优化」提前编译器

1996 年 JDK 1.0 发布,同年 7 月 外挂即时编译器发布(JDK 1.0.2),而 Java 提前编译发布在之后几个月(IBM High Performance Compiler for Java),1998 年 GNU 组织公布 GCC 家族新成员 GNU Compi…...

Golang channel 用法与实现原理

文章目录1.简介2.用法3.三种状态4.实现原理数据结构原理概述5.小结参考文献1.简介 Golang channel 是一种并发原语,用于在不同 goroutine 之间进行通信和同步。本质上,channel 是一种类型安全的 FIFO 队列,它可以实现多个 goroutine 之间的同…...

jackson 序列化、反序列化的时候第一个大写单词变成小写了(属性设置不成功)

参考链接:https://www.baeldung.com/jackson-annotations 遇到的问题 之前和第三方对接,返回的接口中的属性名称是拼音字母大写,奇怪,反序列化的时候好多字段都为空,没设置进去。 因为对接前,我先用 IntelliJ IDEA …...

如何判断机器学习数据集是否是线性的

首先,线性和非线性函数之间的区别: 左边是线性函数,右边是非线性函数。 线性函数:可以简单定义为始终遵循以下原则的函数: 输入/输出=常数。 线性方程总是1次多项式(例如x+2y+3=0)。在二维情况下,它们总是形成直线;在其他维度中,它们也可以形成平面、点或超平面。它们的…...

后端基础SQL

SQL基础语法: sql对大小写不敏感,eg: SELECT 等效于 select;select: select用于从表中查找数据,select 列名 from 表名 —> 结果集::仅有查询列的结果表; SELECT * FROM 表名称 ----> 结果集: 查找表的所有数据…...

Ubuntu 18.04 上编译和安装内核(内核源码版本)

Ubuntu 18.04 上编译和安装内核(内核源码版本) linux发行版本为,ubuntu18.04。内核版本为5.15.7。其他版本类似。 1.下载内核源代码。可以从官方网站下载最新的内核源代码,也可以使用 Git 命令从 Linux 内核的 Git 仓库中获取最新…...

day 53|● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

1143. 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些…...

运维工程师必知的十项Linux常识

1、GNU和GPL GNU计划(又称革奴计划),是由Richard Stallman(理查德斯托曼)在1983年9月27日公开发起的软件集体协作计划。它的目标是创建一套完全的操作系统。GNU也称为软件工程项目。GPL是GNU的通用公共许可证&#xf…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

免费数学几何作图web平台

光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...