OpenCV学习笔记(三)——对于图片的基本操作

 

目录

 

读取图片和显示图片

显示图片的大小 

将图像设置为灰度图 

将图片重新写回指定的地址

显示图片的尺寸

获取图片的类型


读取图片和显示图片

在OpenCV使用cv2.imread()来读取图片,例如,在D盘的Photo的文件夹中有一张图片名称为1的jpeg的图片(图片为演示所用,如有侵权可删除):

 可以看到这是一张动物图片,下面使用OpenCV对于这张图进行读取:

import cv2
import matplotlib.pyplot as plt
import numpy as np
#import表示导入包img=cv2.imread(r'D:\Photo\1.jpeg') #读取D盘中Photo中的为1的jpeg图片

在上面imread()函数中在决定路径加一个r,是为了解决转义的问题。

在上面的代码中,读取的是决定地址,如果用户需要读取相对地址可以不需要写所在问的文件夹,例如:

img=cv2.imread(r'test.jpg') 

这是读取程序所在文件夹中名叫test的jpg图片。

我们可以直接输出img输出:

img

输出结果为下图内容:

那么如何将结果以图像的形式给表示出来呢?下面就以为下面的代码形式来输出结果:

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注:函数解释——waitKey()

上面函数中,OpenCV中waitKey()函数的作用是等待用户按下键盘上的某个键,然后返回该键的ASCII码。如果用户没有按下任何键,那么函数将一直等待,直到用户按下一个键为止。如果是waitKey(0)的话,表示程序会进入无限循环,直到用户按下任意键为止。

而如果是waitKey(1000)的话,表示用户在10秒之后,如果用户没用按下任意键,那么该窗口会自动消失。其中waitKey()函数里的数值是以毫秒为量级的,waitKey(1000)表示等待10秒,waitKey(10000)表示等待100秒。

输出的结果如下所示:

代码执行之后,会单独弹出一个窗口来加载图片(在写代码的时候需要注意的是之后是在浏览器背后弹出的)

同时也可以单独写一个函数来显示图片的内容,当我们再写一些较大的程序的时候可以直接调用。函数为:

def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()

显示图片的大小 

在OpenCV中,使用img.shape可以获得图片的行数、列数和通道数。

img.shape

运行结果如下所示:

(500, 500, 3)

注:OpenCV中shape属性可以返回一个元组,其中分别是行数、列数和组数,其中如果是一个彩色图像的话,那么会有三个通道(红、绿、蓝),如果是一个灰色图像的话,那么只有一个通道。

将图像设置为灰度图 

在OpenCV中将彩色图片转换为灰色图片,只需要在cv2.imread()中第二个参数设置为cv2.IMREAD_GRAYSCALE即可,例如:

import cv2
import matplotlib.pyplot as plt
import numpy as npimg=cv2.imread(r'D:\Photo\1.jpeg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('image_gray',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#本程序是读取Photo中图片1,并且将图片由彩色转换为灰色

运行结果如下所示:

另外一种将彩色图片转换为 灰色图片的方式还有将cv2.imread()第二个参数设置为0,运行结果相同,即:

img=cv2.imread(r'D:\Photo\1.jpeg',cv2.IMREAD_GRAYSCALE)

将图片重新写回指定的地址

在OpenCV中使用cv2.imwrite()将图片重新写回指定地址中,例如将上面的所得到的灰色重新写回文件夹:

cv2.imwrite(r'D:\Photo\2.png',img)

同读取图片相同,当要写入图片到绝对位置的时候,同样需要对决定位置前加上r。当执行后,运行结果在Notebook上显示为:True。再到文件夹中可以看到:

可以看到灰色图片成功写入文件夹中。

显示图片的尺寸

在OpenCV中通常用size属性来表示图像的尺寸,例如将上述的图片查看图片的尺寸:

import cv2
import matplotlib.pyplot as plt
import numpy as npimg1=cv2.imread(r'D:\Photo\1.jpeg')
img2=cv2.imread(r'D:\Photo\1.jpeg',cv2.IMREAD_GRAYSCALE)
img3=cv2.imread(r'D:\Photo\2.png')
print(img1.size)
print(img2.size)
print(img3.size)
#注在实际的文件夹中,1.jpeg是彩色图片,而2.png是黑白图片

运行结果如下所示:

750000
250000
750000

通过上面的运行结果可以看到,由于该图片的行数和列数均为500,得到750000的原因显然是500*500*3=750000,得到250000显然是500*500*1=250000。因此在读取图片时若没有将图片转换为灰色图片(即设置cv2.IMREAD_GRAYSCALE),那么尺寸大小为行数*列数*3(即使图片本身是灰色图片没有设置通道数也为3);若读取图片将图片转换为灰色图片,则通道数为1。

获取图片的类型

在OpenCV中,通过type函数可以获取图片的类型,例如获取上述代码中img的类型:

type(img)

返回的结果为numpy.ndarray,而numpy.ndarray表示的是一个多维数字,在OpenCV中图像多用numpy.ndarray来表示,便于对图像进行操作。

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

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

相关文章

MySQL-MVCC:概述、工作原理、readView实现快照读、数据库解决问题、MVCC无法防止超卖

MySQL-MVCC:概述、工作原理、readView实现快照读、数据库解决问题、MVCC无法防止超卖 一、概述二、MVCC工作原理三、readView实现快照读四、MVCC 可以为数据库解决什么问题五、MVCC无法防止超卖 一、概述 多版本并发控制(Multi-Version Concurrency Con…

无法使用debugger,debugger在项目中不生效,导致无法有效排查问题

debugger是浏览器提供的调试语句,其主要是通过停止JS的执行,相当于设置断点。它的使用方法很简单, 只需要在我们的JS语句中, 插入一行debugger; 即可。 在JS代码编写的过程中,我们都会通过浏览器的调试模式&#xff08…

微擎安装,卡在“安装微擎”界面

进入install.php,点击【在线安装】 下一步配置数据库,开始安装系统 然后显示进度条,进度条一闪而过 然后就没有进度条显示了,一直卡在这里 第一次等了好久, 删除目录下的文件,重装还是这样 再重启服务器&…

代码随想录算法训练营第三十九天|LeetCode62 不同路径、LeetCode63 不同路径II

62.不同路径 思路:确定dp数组及其下标含义,dp[i][j]代表到达i,j坐标的路径数。确定递推公式dp[i][j] dp[i-1][j]dp[i][j-1]。因为只能向右向下移动。初始化dp数组,dp数组的第一行第一列都为1,因为不能向上向左。遍历…

3D-Genome | Hi-C互作矩阵归一化指南

Hi-C 是一种基于测序的方法,用于分析全基因组染色质互作。它已广泛应用于研究各种生物学问题,如基因调控、染色质结构、基因组组装等。Hi-C 实验涉及一系列生物化学反应,可能会在输出中引入噪声。随后的数据分析也会产生影响最终输出噪声&…

Python Tkinter GUI 基本概念

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝如果停止,就是低谷&#xf…

PostgreSQL教程(二十五):服务器管理(七)之管理数据库

每个正在运行的PostgreSQL服务器实例都管理着一个或多个数据库。因此,在组织SQL对象(“数据库对象”)的层次中,数据库位于最顶层。本章描述数据库的属性,以及如何创建、管理、删除它们。 一、概述 一个数据库是一些S…

计算机网络概论01

计算机系统基础知识 基本组成 计算机系统由硬件和软件组成。 硬件由五大部分,他们分别是: 运算器 执行算数运算和逻辑运算控制器 控制cpu的工作,决定了计算机运行过程的自动化。包括指令控制逻辑、时序控制逻辑、总线控制逻辑和中断控制逻辑…

node项目通过.env文件配置环境变量

https://www.npmjs.com/package/dotenv require(dotenv).config()console.log(process.env, process.env.apiKeyOnServer)我开发的chatgpt项目: https://chat.xutongbao.top

Linux驱动适配内核时,对于不同版本内核中有变化函数的处理

一、情景 Linux驱动适配不同内核时,由于内核版本的不同,有些函数可能没有,或者函数直接变化了,高版本可能增加了一些参数。 二、常规处理方案,根据内核版本判断 一般情况我们处理方式是在使用这些函数时&#xff0c…

Imagination:RISC-V CPU的重要力量

根据SHD集团最近发布的报告显示,RISC-V正全速发展中。通过分析从2021年到2030年这十年间RISC-V核在不同应用和功能领域的潜在市场,作者Rich Wawrzyniak得出结论称,到2030年,22.3%的SoC将包含RISC-V CPU,RISC-V的收入预…

Docker网络+原理+link+自定义网络

目录 一、理解Docker网络 1.1 运行tomcat容器 1.2 查看容器内部网络地址 1.3 测试连通性 二、原理 2.1 查看网卡信息 2.2 再启动一个容器测试网卡 2.3 测试tomcat01 和tomcat02是否可以ping通 2.4 只要删除容器,对应网桥一对就没了 2.5 结论 三、…

蓝牙耳机潜水时可以用吗?适合潜水的四大游泳耳机分享

在科技日新月异的今天,我们越来越依赖各种电子设备来丰富我们的生活。无论是运动、工作还是休闲娱乐,耳机都成为了我们不可或缺的伙伴之一。然而,当谈到水上活动时,许多人可能会对蓝牙耳机是否能在水下使用感到困惑。虽然市面上有…

前端实现图片绕指定圆心转动,且图片自身不转动的功能

前端实现图片绕指定圆心转动&#xff0c;且图片自身不转动的功能、 div>img div: 利用css的animation 去做循环 用transform: rotate 去做旋转 然后利用transform-origin: bottom left;指定旋转圆心位置 img 在div旋转的同时 做反向旋转 <template><div class&qu…

SpringBoot第三课-日志

1.日志分类 2.默认使用 默认使用logback与slf4j作为底层默认日志 但是由于日志是系统启动就需要使用&#xff0c;所以与其他的自动配置不同&#xff0c;自动配置是后来使用的&#xff0c;而日志是使用监听器配置好的。 ApplicationListener 3.日志级别 1.级别介绍 SpringB…

刷题第11天

代码随想录刷题第11天 | 二叉树前中后序遍历 前序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x…

学AI,3种人,3种学法

在刘润的文章《都说要学AI&#xff0c;但3种人&#xff0c;3种学法》中&#xff0c;作者针对当前AI热潮下不同人群的学习需求&#xff0c;提出了三种不同的学习策略&#xff0c;觉得很有启发性&#xff0c;重点总结如下&#xff0c;原始文章较长&#xff0c;链接在文章结尾。 随…

使用采购管理软件构建更高效的采购模式

采购流程是企业整个采购部门的关键要素。无论企业规模大小&#xff0c;构建采购流程的模式都将直接影响企业控制成本、管理风险和保持流程弹性的能力。 下面我们将解释采购模式的类型、优缺点&#xff0c;以及如何确定哪种模式最适合你的采购部门。 集中采购的优缺点 在集中采…

Windows的自动更新和自带的杀毒软件怎么弄掉!

关闭Windows系统更新 Windows系统更新是为了保持设备的平稳和安全运行,保持操作系统安全、稳定及获取新功能修复已知问题并修补安全漏洞的重要过程。如果您想要临时或永久关闭Windows系统的自动更新,可以采用以下几种方式。不过,请务必意识到,禁用系统更新可能会导致您的系…

什么是VRRP?

目录 什么是VRRP&#xff1f; 一、VRRP的定义 VRRP的三种状态 VRRP决定哪个路由器是Master。 二、VRRP的作用 三、VRRP名词解释 1、Virtual Router 2、VRRP Router 四、华为VRRP实验配置基础 检查基于IPv4的VRRP基本功能配置结果 随着网络的快速普及和相关应用的日益深…