Python + OpenCV 开启图片、写入储存图片

这篇教学会介绍OpenCV 里imread()、imshow()、waitKey() 方法,透过这些方法,在电脑中使用不同的色彩模式开启图片并显示图片。

imread() 开启图片

使用imread() 方法,可以开启图片,imread() 有两个参数,第一个参数为档案的路径和名称,第二个参数可不填,表示以何种模式( mode ) 开启图片,开启的图片支援常见的jpg、png...等格式,下面是最基本开启图片的程式码。

import cv2
img = cv2.imread('meme.jpg')   # 开启图片,预设使用 cv2.IMREAD_COLOR 模式
cv2.imshow('oxxostudio', img)  # 使用名为 oxxostudio 的视窗开启图片
cv2.waitKey(0)                 # 按下任意键停止
cv2.destroyAllWindows()        # 结束所有图片视窗

如果设定第二个参数,就能使用不同的色彩模式开启图片,下面的程式码执行后,会以灰阶模式开启图片。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)  # 使用 cv2.IMREAD_GRAYSCALE 模式
# img = cv2.imread('meme.jpg', 2) # 也可使用数字代表模式
cv2.imshow('oxxostudio', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

imshow() 显示图片

在上面的程式码中,使用了imshow() 的方法显示图片,imshow() 包含两个参数,第一个参数为字串,表示要开启图片的视窗名称,第二个参数为使用imread()读取的图片

waitKey() 等待多久关闭

使用imshow() 方法时会搭配waitKey(),waitKey() 表示等待与读取使用者按下的按键,包含一个单位为「毫秒」的参数,如果设定0 表示持续等待至使用者按下按键为止,下方的程式码设定waitKey 的参数为2000,表示两秒后会关闭图片视窗( 两秒内如果按下q 就会中止计时并关闭视窗)。

如果遇到视窗无法关闭的状况,可以使用destroyAllWindows() 的方法关闭所有视窗,或使用destroyWindow(name) 关闭指定名称的视窗。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)  # 使用 cv2.IMREAD_GRAYSCALE 模式
cv2.imshow('oxxostudio', img)
cv2.waitKey(2000)       # 等待两秒 ( 2000 毫秒 ) 后关闭图片视窗
cv2.destroyAllWindows()

色彩模式数字对照表

写入并储存图片

这篇教学会介绍OpenCV 里的imwrite() 方法,实现将图片另存新档( 也可转档) 的功能。

imwrite() 写入并储存图片

使用imwrite() 方法,可以将处理好的资料内容写入并储存为图片,imwrite() 有三个参数,第一个参数为档案的路径和名称,第二个参数为要写入的资料内容,第三个参数为图片压缩品质的设定

下方的程式码执行后,会先用「灰阶模式」开启一张图片,然后再将其存档为压缩品质80 的jpg 和套用预设值的png 图档。

import cv2
img = cv2.imread('meme.jpg', cv2.IMREAD_GRAYSCALE)   # 以灰阶模式开启图片
cv2.imwrite('oxxostudio_2.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 80])  # 存成 jpg
cv2.imwrite('oxxostudio_3.png', img)  # 存成 png

储存阵列产生的图片

在Python 里,图片可以使用「三维阵列」的方式表现(长宽各多少个像素、每个像素里包含的颜色资讯是什么),因此如果提供特定格式的三维阵列的资料,就能让OpenCV 画出图形。

下面的范例使用numpy 函式库,快速产生500x500,每个项目为[0,0,0] 的三维阵列,接着再让阵列中间的正方形区域的项目设定为[0,0,255],呈现的就是一张500x500 大小,黑色背景,中间200x200 红色正方形的图形,最后使用imwrite() 的方法,就能储存这张图片。

注意!OpenCV 里的颜色为「BGR」,并非RGB,颜色色码为0~255

import cv2
import numpy as np
img = np.zeros((500,500,3), dtype='uint8')   # 快速产生 500x500,每个项目为 [0,0,0] 的三维阵列
img[150:350, 150:350] = [0,0,255]  # 将中间 200x200 的每个项目内容,改为 [0,0,255]
cv2.imwrite('oxxostudio.jpg', img)       # 存成 jpg
cv2.imshow('oxxostudio', img)            # 显示图片
cv2.waitKey(0)                           # 按下任意键停止
cv2.destroyAllWindows()

相关推荐

  1. Halcon C++ XLD 数据写入图片

    2024-07-10 12:40:02       14 阅读
  2. Web开发之上传图片

    2024-07-10 12:40:02       13 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 12:40:02       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 12:40:02       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 12:40:02       4 阅读
  4. Python语言-面向对象

    2024-07-10 12:40:02       5 阅读

热门阅读

  1. 6、Redis系统-数据结构-01-String

    2024-07-10 12:40:02       10 阅读
  2. STM32学习和实践笔记(39):I2C EEPROM实验

    2024-07-10 12:40:02       6 阅读
  3. Python面试题:请解释什么是反射(reflection)?

    2024-07-10 12:40:02       8 阅读
  4. Rudolf and k Bridges——Codeforces Round 933 (Div. 3) E

    2024-07-10 12:40:02       8 阅读
  5. 墨烯的C语言技术栈-C语言基础-010

    2024-07-10 12:40:02       13 阅读
  6. html5路由如何在nginx上部署(vite+vue3)

    2024-07-10 12:40:02       11 阅读
  7. nodejs学习之glob

    2024-07-10 12:40:02       9 阅读
  8. Unity--异步加载场景

    2024-07-10 12:40:02       7 阅读