day2 - 使用OpenCV进行图像的读取与展示

news/2025/1/12 23:28:11/

本期将使用OpenCV对图像进行一些基本的了解和操作:主要包含图像的读取、展示和保存,以及查看图像的基本属性,让我们充分的了解图像,为后续图像处理做准备。

完成本期内容,你可以:

  • 会使用OpenCV对图像进行读取、展示、保存等基本操作

  • 学会查看图像的基本属性

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

    # 比如: opencv安装
    pip install opencv-python==3.4.2.16
    # 如果下载速度特别慢可以指定国内镜像
    pip install opencv-python==3.4.2.16 -i https://pypi.douban.com/simple
    

点击下载源码


图像读取

OpenCV中提供的图像读取的函数是 cv2.imread( )。

函数原型: image = cv2.imread(filename, flags)

image 为输出图像。

参数描述如下:

参数描述
filename【必需】要读取的图像的完整文件名。
flags读取图像颜色类型的标记。flags的默认值是1,表示读取的图像是彩色图像,此时的flags可以省略;当flags的值为0时,表示要读取的是灰度图像(如果读取的是彩色图像,也将彩色图像转换为彩色图像对应的灰度图像)

图像展示

OpenCV 中提供的图像展示的函数是 cv2.imshow( )。

函数原型: cv2.imshow(winname, mat)

image 为输出图像。

参数描述如下:

参数描述
winname显示图像的窗口名称
mat要显示的图像

使用 OpenCV 展示图片时,通常需要通过用户键盘输入来关闭窗口,OpenCV 中提供的等待用户按键的函数是cv2.waitKey( )。

函数原型: retval = cv2.waitKey(delay)

retval 为被按下的按键对应的 ASCII 码。

参数描述如下:

参数描述
delay等待用户按下键盘上按键的时间,单位是毫秒(ms)。当delay的值为复数、0或者空时,表示无限等待用户按下键盘上的时间。

OpenCV 中提供的用于销毁正在显示图像的窗口的函数是 cv2.destroyAllWindows( )。

函数原型: cv2.destroyAllWindows( )

图像保存

OpenCV 中提供的图像保存的函数是 cv2.imwrite( )。

函数原型:cv2.imwrite(filename, img);

参数描述如下:

参数描述
filename保存图像时的完整路径
img要保存的图像

4.4 获取图像属性

在处理图像的过程中,经常需要获取大小、类型等图像属性。为此,OpenCV 提供了 shape、size 和 dtype 3个属性,具体含义如下:

  • shape:如果是彩色图像,那么获取的是一个包含图像的垂直像素、水平像素和通道数的数组,即(垂直像素,水平像素,通道数);如果是灰度图像,那么获取的是一个包含图像垂直像素和水平像素的数组,即(垂直像素,水平像素)。
  • size:获取的是图像包含的像素个数,其值为 “ 水平像素 × 垂直像素 × 通道数 水平像素\times 垂直像素 \times 通道数 水平像素×垂直像素×通道数 ”。
  • dtype:获取的是图像的数据类型

具体步骤

1. 创建项目结构

创建项目名为使用OpenCV进行图片的展示与保存,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

使用OpenCV进行图片的展示与保存             # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 使用 OpenCV 读取图片并展示

  1. code文件夹下创建img_show.py文件;
  2. 读取dataset文件夹下的flower.jpg图片,并进行展示,标题为 flower ;
  3. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取彩色图像
img = cv2.imread('../dataset/flower.jpg')
# 展示图像
cv2.imshow("flower",img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

3. 使用 OpenCV 读取灰度图片并保存

  1. code文件夹下创建img_save.py文件;
  2. 读取dataset文件夹下的flower.jpg图片,转换为灰度图,并进行展示,标题为flower ;
  3. 将灰度图片以gray_img.jpg 保存至dataset文件夹下;
  4. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
gray_img = cv2.imread('../dataset/flower.jpg',0)
# 展示图像
cv2.imshow("flower",gray_img)
# 保存图像
cv2.imwrite('../dataset/gary_img.jpg',gray_img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

4. 打印图像的属性

  1. code文件夹下创建img_attributes.py文件;
  2. 读取dataset文件夹下的flower.jpg图片;
  3. 打印图像的(垂直像素,水平像素,通道数)、像素数 、数据类型。

代码实现

# 导入OpenCV
import cv2
# 读取彩色图像
img = cv2.imread('../dataset/flower.jpg')
# 打印彩色图像的属性
print('---获取图像flower.jpg的属性---')
print('图像的(垂直像素,水平像素,通道数)',img.shape)
print('图像包含的像素数',img.size)
print('图像的数据类型',img.dtype)
# 实验结果
---获取图像flower.jpg的属性---
图像的(垂直像素,水平像素,通道数) (596, 452, 3)
图像包含的像素数 808176
图像的数据类型 uint8

素,水平像素,通道数)',img.shape)
print(‘图像包含的像素数’,img.size)
print(‘图像的数据类型’,img.dtype)


```python 
# 实验结果
---获取图像flower.jpg的属性---
图像的(垂直像素,水平像素,通道数) (596, 452, 3)
图像包含的像素数 808176
图像的数据类型 uint8

通过调用OpenCV接口,可以实现图像的图像的读取、展示和保存,以及查看图像的基本属性,让我们充分的了解图像,为后续图像处理做准备。在使用OpenCV接口的时候,要清楚接口参数的含义和作用,这样才能够操作图像达到我们想要的效果。

点击下载源码


http://www.ppmy.cn/news/80502.html

相关文章

MyBatis 中的动态 SQL 是什么?它的作用是什么?

MyBatis 中的动态 SQL 是一种允许在 SQL 语句中根据不同的条件动态生成 SQL 语句的技术。它可以根据不同的条件生成不同的 SQL 语句,从而达到灵活构建 SQL 语句的目的。动态 SQL 可以减少代码的重复度,提高代码的可维护性和可读性。 动态 SQL 使用 OGNL…

abc225 E 经典区间覆盖问题

题意:每个顶点与其左边一个点和下面一个点与原点围成一个四边形,求最小删掉几个四边形,使得所有四边形互不相交。 思路:其实每个顶点可以看作占据了一个斜率区间,那么问题就变成的经典的区间问题,我们直接…

termux-x11教程

小粉丝已经求稿两个星期了,不写是不行了。 termux-x11 是Termux的一个图形化项目,官方是这么介绍的。 A Termux add-on app providing Android frontend for Xwayland.安装工具 我们需要在Termux和安卓系统上安装工具以成功的运行程序。 x11-repo&am…

Go面试题

文章目录 1.下面这段代码输出什么?2.下面代码输出什么?3.同级文件的包名不允许有多个,是否正确?4.下面的代码有什么问题,请说明。 1.下面这段代码输出什么? func main() {count : 0for i : range [256]str…

主机探测与端口扫描-渗透测试模拟环境(2)

本篇将介绍主机探测与端口扫描渗透模拟环境下整理的各类收集方法、各类工具技术使用的演示,阅读后可用在工作上 。 往期系列文章: 渗透攻防环境搭建与攻防知识体系思维导图 渗透模拟环境配置和工具介绍-渗透测试模拟环境(0)_luozhonghua2000的博客-CSDN博客 外围信息搜集-…

程序员开发之“留一手“

很多乙方公司为了顺利获得项目的尾款,或者有些项目的封装整合的逻辑比较多,通常会把项目的业务逻辑代码及架构进行打包成线上NuGet包。 一、 NuGet包 其实就是线上的.dll文件 ,在本地编译后上传是NuGet 1、首先注册NuGet 2、记住API Key …

Python爬虫之BeautifulSoup详解

Beautiful Soup(以下简称BS)是Python中最为流行的HTML和XML解析库之一。它的主要目的是从HTML或XML中提取数据。相比于Python内置的HTML解析库,BS提供了更加简单易用的API,使得编写爬虫或者数据清洗的工作更加高效、简单。 1.安装…

es 三 安装 es 安装kibana

目录 安装7.3.0 版本 下载地址 一个比一个快 页面测试访问 安装kibana 下载 Config/kibana.yml 配置修改开启中文 页面访问 安装7.3.0 版本 下载地址 一个比一个快 Index of /elasticsearch/ 下载中心 - Elastic 中文社区 下载中心 - Elastic 中文社区 官网下载 开箱…