【OpenCV学习笔记1】基础:读取、显示、保存图像

news/2025/2/26 4:34:31

文章目录

    • 1. 读取图像
    • 2. 显示图像
    • 3. 保存图像
    • References

OpenCV 读取图片非常方便,但是需要注意 OpenCV 默认使用 BGR 模式,而不是 RGB 模式,如果需要使用其他工具处理,需要注意这一点。

1. 读取图像

使用 imread 函数读取图像:

import cv2

img = cv2.imread('test.jpg') # 默认使用BGR模式(IMREAD_COLOR)读入

也可以使用其他模式入读照片,如灰度模式:

img = cv2.imread('images/jm.jpg', cv2.IMREAD_GRAYSCALE)

所有的模式如下所示:

读取模式说明
IMREAD_UNCHANGED = -1原图,包括 alpha 通道
IMREAD_GRAYSCALE = 0灰度图
IMREAD_COLOR = 13 通道 BGR 模式
IMREAD_ANYDEPTH = 2如果原图是 16 位或 32 位,直接读取,否则转换为 8 位图
IMREAD_ANYCOLOR = 4根据文件格式读取为对应颜色模式的图像,任何支持的颜色模式均可
IMREAD_LOAD_GDAL = 8使用 GDAL 读取
IMREAD_IGNORE_ORIENTATION = 128忽略 EXIF 的旋转信息
IMREAD_REDUCED_COLOR_2 = 17
IMREAD_REDUCED_COLOR_4 = 33
IMREAD_REDUCED_COLOR_8 = 65
BGR 模式,图像大小分别为原来的 1/2、1/4、1/8
IMREAD_REDUCED_GRAYSCALE_2 = 16
IMREAD_REDUCED_GRAYSCALE_4 = 32
IMREAD_REDUCED_GRAYSCALE_8 = 64
灰度模式,图像大小分别为原来的 1/2、1/4、1/8

2. 显示图像

使用 imshow 函数显示图像,第一个参数为窗口标题,第二个参数为图像:

import cv2

img = cv2.imread('test.jpg', cv2.IMREAD_COLOR)
cv2.imshow('test', img)
cv2.waitKey(0)

注意:imshow 函数后必须加上 waitKey 函数否则会出现无响应。

waitKey() 函数的功能是不断刷新图像,参数为 delay,单位是 ms,返回值为当前键盘按下的值,没有按键时返回-1。当 delay 为 0 时表示一直显示同一帧图像。

3. 保存图像

使用 imwrite 函数保存图像:

import cv2

img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE) # 以灰度方式读取
cv2.imshow('test', img) # 显示图像
cv2.waitKey(0)

cv2.imwrite('test_gray.jpg', img) # 保存图像

写图像同样有很多模式和参数,例如使用如下参数:

cv2.imwrite('test_gray.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 10])

JPG 质量为 10,可以看见明显的马赛克:
在这里插入图片描述
如果质量设置为 100,则更清晰:
在这里插入图片描述
其中 cv2.IMWRITE_JPEG_QUALITY 用于 jpg 质量控制,取值 0-100,值越大质量越好,默认为 95。另外还有如 cv2.IMWRITE_PNG_COMPRESSION 用于 png 质量控制,取值 0-9,值越大,压缩比越高,文件越小,质量越差,默认为 1。更多参数可参考 References 中的第 3 篇引用文档。


References

  1. OpenCV: Getting Started with Images
  2. OpenCV: Image file reading and writing - imread
  3. OpenCV: Image file reading and writing - imwrtie
  4. OpenCV: High-level GUI - imshow
  5. OpenCV: High-level GUI - waitKey
  6. OpenCV: Flags used for image file reading and writing

QQ交流群:点击链接加入群聊【Python练习生】532232743
我的知乎:AXin啊
公众号:请叫我AXin
在这里插入图片描述


http://www.niftyadmin.cn/n/712481.html

相关文章

洛谷P1130-红牌(DP)

题目描述: 某地临时居民想获得长期居住权就必须申请拿到红牌。获得红牌的过程是相当复杂 ,一共包括N个步骤。每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件。为了加快进程,每一步政府都派了M个工作人员来检查材料。不幸…

mysql重做日志与binlog日志区别_mysql日志:redo log、binlog、undo log 区别与作用

一、redo log重做日志作用:确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。内容:物理格式的日志,记…

cmd常用查看配置的命令

2019独角兽企业重金招聘Python工程师标准>>> 1.查看ip配置:ipconfig 2.查看jdk配置:java -version 3.查看maven配置:mvn -v 4.查看所有java环境变量配置: mvn help:system 5.查看java反编译文件: F:\代码\M…

servlet request参数只能取一次解决方法

解决方法,建一个包装类 package com.g4m.admin.conf;import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.HashMap; import java.util.M…

洛谷P2719-搞笑世界杯(DP)

题目背景: 很久很久以后,一次世界杯,。 题目描述: 随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比赛.你和你的朋友欣然去…

走近Guava(三): 集合

2019独角兽企业重金招聘Python工程师标准>>> 集合&#xff1a; FluentIterable类&#xff1a; 使用FluentIterable.filter过滤, 即利用Predicate实现&#xff1a; Iterable<Person> adults FluentIterable.from(ps).filter(new Predicate<Person>() …

【OpenCV学习笔记2】基础:读取、播放、保存视频

文章目录1. 读取摄像头2. 读取视频3. 保存视频References使用 OpenCV 也可以非常方便地读取、播放、保存视频&#xff0c;下面分别介绍。 1. 读取摄像头 VideoCapture 类用于从视频、图像序列、摄像头获取输入。先看如何读取摄像头输入&#xff1a; import cv2capture cv2.…

Django框架之图书管理系统(二)

该篇文章介绍多对多的关系介绍 一、数据库设计 一个作者对应多个书籍 一个书籍对应多个作者 总结也就是多对多之间的关系 通过模型类创建多对多之间的关系表的时候&#xff0c;Django框架通过ORM创建三个表&#xff0c;分别是作者表&#xff0c;书籍表&#xff0c;记录作者id对…