OPENCV(图像入门笔记)

使用OpenCV读取图像

使用cv.imread()函数读取图像。
第一个参数为图像名称
第二个参数是一个标志,它指定了读取图像的方式。分别有三种
cv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
cv.IMREAD_GRAYSCALE:以灰度模式加载图像
cv.IMREAD_UNCHANGED:加载图像,包括alpha通道
除了这三个标志,你可以分别简单地传递整数1、0或-1,分别对应为上面三种

import cv2
img=cv2.imread("./photos/000.png",1)  #代表为彩色图像

显示图像

使用函数cv.imshow()在窗口中显示图像。第一个参数是窗口名称,它是一个字符串。第二个参数是我们的对象。
使用函数cv2.waitKey(0)是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果0被传递,它将无限期地等待一次敲击键。
cv2.destroyAllWindows()破坏我们创建的所有窗口,清除内存。

cv2.imshow("dog",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在特殊情况下,你可以创建一个空窗口,然后再将图像加载到该窗口。在这种情况下,你可以指定窗口是否可调整大小。这是通过功能cv.namedWindow()完成的。默认情况下,该标志为cv.WINDOW_AUTOSIZE。但是,如果将标志指定为cv.WINDOW_NORMAL,则可以调整窗口大小。当图像尺寸过大以及向窗口添加跟踪栏时,这将很有帮助。

写入图像

使用函数cv.imwrite()保存图像。
第一个参数是文件名,第二个参数是要保存的图像。 cv.imwrite(‘messigray.png’,img)
这会将图像以PNG格式保存在工作目录中。

import cv2  # 导入OpenCV库  
  
# 读取图片,"./photos/000.png" 是图片的路径,-1 表示以原始格式读取图片(包括alpha通道)  
img = cv2.imread("./photos/000.png", -1)  
  
# 使用cv2.imshow显示图片,"dog"是窗口的名字,img是要显示的图片  
cv2.imshow("dog", img)  
  
# 等待键盘输入,参数0表示无限等待  
key = cv2.waitKey(0)  
  
# 打印按下的键的ASCII码  
print(key)  
  
# 判断是否按下了'a'键(注意这里要检查的是ASCII码)  
if key == ord('a'):  
    # 如果是,则关闭所有OpenCV创建的窗口  
    cv2.destroyAllWindows()  
# 或者判断是否按下了's'键  
elif key == ord('s'):  
    # 重新以灰度模式读取图片(0 表示灰度模式)  
    img = cv2.imread("./photos/000.png", 0)  
    # 将读取的图片保存到"./photos/003.png"  
    cv2.imwrite("./photos/003.png", img)  
    print("写入成功")  
    # 关闭所有OpenCV创建的窗口  
    cv2.destroyAllWindows()  
  
# 注意:如果没有按'a'或's',窗口将保持打开状态,直到你手动关闭它。

使用Matplotlib

Matplotlib是Python的绘图库,可以使用Matplotlib缩放图像,保存图像等
OpenCV加载的彩色图像处于BGR模式。但是Matplotlib以RGB模式显示。因此,如果使用OpenCV读取彩色图像,则Matplotlib中将无法正确显示彩色图像。

#使用Matplotlib
import numpy as np
import cv2
from  matplotlib import pyplot as plt

# 使用cv2.imread读取图片,'./photos/001.png'是图片的路径,0表示以灰度模式读取图片
img = cv2.imread('./photos/001.png', 0)

# 使用plt.imshow显示图片
# img是要显示的图片,cmap='gray'指定使用灰度颜色映射,interpolation='bicubic'指定使用双三次插值法来平滑图像
# 双三次插值法是一种在图像处理中常用的插值方法,它可以在放大图像时提供更好的平滑效果
plt.imshow(img, cmap='gray', interpolation='bicubic')

# 隐藏x轴和y轴上的刻度值
# plt.xticks([])和plt.yticks([])分别用于设置x轴和y轴的刻度标签为空列表,即不显示刻度值
plt.xticks([]), plt.yticks([])

# 显示图像
# plt.show()函数会打开一个窗口,显示通过plt.imshow等函数绘制的图像
# 当调用这个函数后,程序会暂停执行,直到你关闭显示的图像窗口
plt.show()

Matplotlib与opencv展示图像区别

import cv2  # 导入OpenCV库  
from matplotlib import pyplot as plt  # 导入Matplotlib的pyplot模块用于绘图  
  
# 使用cv2.imread读取图片,"./photos/001.png"是图片的路径,1表示以彩色模式读取图片  
img = cv2.imread("./photos/001.png", 1)  
  
# 使用cv2.split函数将图片拆分为三个单独的颜色通道:蓝色(b)、绿色(g)、红色(r)  
b, g, r = cv2.split(img)  
  
# 使用cv2.merge函数将颜色通道重新合并,但这次是以RGB顺序(红绿蓝),而不是原始的BGR顺序  
img2 = cv2.merge([r, g, b])  
  
# 创建第一个子图,占据1行2列中的第1个位置  
plt.subplot(121)  
# 隐藏x轴和y轴的刻度值  
plt.xticks([]), plt.yticks([])  
# 使用plt.imshow显示原始BGR格式的图像  
plt.imshow(img)  
  
# 创建第二个子图,占据1行2列中的第2个位置  
plt.subplot(122)  
# 隐藏x轴和y轴的刻度值  
plt.xticks([]), plt.yticks([])  
# 使用plt.imshow显示转换后的RGB格式的图像  
# 注意:在Matplotlib中,默认情况下假设图像是RGB格式的,因此这里会显示正确的颜色  
plt.imshow(img2)  
  
# 显示所有子图  
plt.show()  
  
# 使用cv2.imshow显示图像  
# 第一个窗口显示原始BGR格式的图像,OpenCV读取的图像默认是BGR格式的,所以这里显示的颜色是正确的  
cv2.imshow('bgr image', img)  
  
# 第二个窗口显示转换后的RGB格式的图像,但在OpenCV中,它仍然按照BGR的顺序来解释像素值  
# 因此,尽管我们尝试以RGB顺序合并颜色通道,但OpenCV在显示时仍会将其视为BGR,导致颜色失真  
cv2.imshow('rgb image', img2)  
  
# 等待任意键按下  
cv2.waitKey(0)  
  
# 销毁所有OpenCV创建的窗口  
cv2.destroyAllWindows()

需要注意的是,在OpenCV中读取和保存图像时,默认的颜色顺序是BGR(蓝绿红),而不是常见的RGB(红绿蓝)。这就是为什么当你将颜色通道重新排序为RGB并使用OpenCV显示时,颜色会看起来失真的原因。Matplotlib则默认处理RGB格式的图像,因此当你使用plt.imshow()显示图像时,如果图像数据是以RGB顺序排列的,它将正确地显示颜色。

Matplotlib图像,左边为BGR 右边为RGB
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是 HTTP POST 请求?初学者指南与示范

在现代网络开发领域,理解并应用 HTTP 请求 方法是基本的要求,其中 "POST" 方法扮演着关键角色。 理解 POST 方法 POST 方法属于 HTTP 协议的一部分,主旨在于向服务器发送数据以执行资源的创建或更新。它与 GET 方法区分开来&…

Linux:Ubuntu18.04下开机自启动QT图形化界面

Linux:Ubuntu18.04下开机自启动QT图形化界面 Chapter1 Linux:Ubuntu18.04下开机自启动QT图形化界面一、创建rc.local文件二、建立rc-local.service文件三、启动服务查看启动状态四、重启 Chapter2 将QT应用作为开机自启动(Linux系统&#xff…

预约停车位app小程序模板

简单的手机预约停车位,在线停车位,预约停车管理小程序页面模板。包含:主页、预约停车、预约管理、地图导航等。 预约停车位app小程序模板

bash条件判断基础adsawq1`1nn

判断的作用 判断后续操作的提前条件是否满足如果满足执行一种命令不满足则执行另一种指令 条件测试类型: 整型测试字符测试文字测试 整数测试:比较两个整数谁大谁小,是否相等; 二元测试: num1 操作符 num2 -eq: 等于…

Flink,spark对比

三:az 如何调度Spark、Flink,MR 任务 首先,使用java编写一个spark任务,定义一个类,它有main方法,里面写好逻辑,sparkConf 和JavaSparkContext 获取上下文,然后打成一个jar包&#xf…

基于机器学习(霍特林统计量,高斯混合模型,支持向量机)的工业数据异常检测(MATLAB R2021B)

近年来,隨着集散控制系统、工业物联网、智能仪表等信息技术在现代工业生产系统中的应用,生产过程的运行状态能够以大量数据的形式被感知和记录。基于数据的故障诊断方法以过程数据为基础,采用统计分析、统计学习、信号处理等方法,…

笔记:SpringBoot+Vue全栈开发2

笔记:SpringBootVue全栈开发2 1. MVVM模式2. Vue组件化开发3. 第三方组件element-ui的使用4. axios网络请求5. 前端路由VueRouter 1. MVVM模式 MVVM是Model-View-ViewModel的缩写,是一种基于前端开发的架构模式,其核心是提供对View和ViewMod…

【简单介绍下Memcached】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

独立开发者系列(21)——HTTP协议的使用

作为网络访问的必备知识点,http协议,我们已经知道http协议属于tcp的一种,而且一般是用于网络通讯的,但是本身http协议本身包含的内容也很多,正是因为有这种协议,前后端和各种硬件接口/服务器接口/前端&…

VSCode远程服务器如何上传下载文件(超方便!)

方法一: 1、在VSCode应用商店安装SFTP插件 2、然后就可以直接把文件拖进VSCode即可,如下图所示: 这里的目录是我远程服务器上的目录,可以直接将要上传的文件直接拖进需要的文件夹 3、如果要从远程服务器上下载文件到本地&#x…

手写实现一个ORM框架

手写实现一个ORM框架 什么是ORM框架、ORM框架的作用效果演示框架设计代码细节SqlBuilderSqlExecutorStatementHandlerParameterHandlerResultSetHandler逆序生成实体类 大家好,本人最近写了一个ORM框架,想在这里分享给大家,让大家来学习学习。…

axios的使用,处理请求和响应,axios拦截器

1、axios官网 https://www.axios-http.cn/docs/interceptors 2、安装 npm install axios 3、在onMouunted钩子函数中使用axios来发送请求,接受响应 4.出现的问题: (1) 但是如果发送请求请求时间过长,回出现请求待处…

分布式共识算法

分布式的基石 分布式共识算法 前置知识:分布式的 CAP 问题,在事务一章中已有详细介绍。 正式开始探讨分布式环境中面临的各种技术问题和解决方案以前,我们先把目光从工业界转到学术界,学习两三种具有代表性的分布式共识算法&…

昇思MindSpore学习总结十——ResNet50迁移学习

1、迁移学习 (抄自CS231n Convolutional Neural Networks for Visual Recognition) 在实践中,很少有人从头开始训练整个卷积网络(使用随机初始化),因为拥有足够大小的数据集相对罕见。相反,通常…

Flask之电子邮件

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、使用Flask-Mail发送电子邮件 1.1、配置Flask-Mail 1.2、构建邮件数据 1.3、发送邮件 二、使用事务邮件服务SendGrid 2.1、注册SendGr…

昇思25天学习打卡营第11天|MindSpore 助力下的 GPT2:数据集加载处理及模型全攻略

目录 环境配置 数据集下载和获取 数据集拆分 处理数据集 模型构建 ​​​​​​​模型训练 ​​​​​​​模型推理 环境配置 “%%capture captured_output”这一行指令通常旨在捕获后续整个代码块所产生的输出结果。首先,将已预装的 mindspore 库予以卸载。随后&a…

68.WEB渗透测试-信息收集- WAF、框架组件识别(8)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:67.WEB渗透测试-信息收集- WAF、框架组件识别(7) 右边这些是waf的…

【Java学习笔记】方法的使用

【Java学习笔记】方法的使用 一、一个例子二、方法的概念及使用(一)什么是方法(二)方法的定义(三)方法调用的执行过程(四)实参和形参的关系(重要)&#xff08…

第1节、基于太阳能的环境监测系统——MPPT充电板

一、更新时间: 本篇文章更新于:2024年7月6日23:33:30 二、内容简介: 整体系统使用太阳能板为锂电池充电和系统供电,天黑后锂电池为系统供电,本节主要介绍基于CN3722的MPPT太阳能充电模块,这块主要是硬件…

如何从相机的存储卡中恢复原始照片

“不好了。” 当您意识到自己不小心从存储卡中删除了照片,或者错误地格式化了相机的记忆棒时,您首先会喊出这两个词。这是一种常见的情况,每个人一生中都会遇到这种情况。幸运的是,有办法从相机的 RAW 记忆棒中恢复已删除的照片。…