一、图像读写操作
(一)读取图像
方法:
cv2.imread(filename, flags=None)
参数说明:
filename (字符串):
- 必须参数。
- 指定要读取的图像文件的路径。可以是相对路径或绝对路径。
- 支持多种图像格式,如 .jpg, .png, .bmp, .tiff, .jpeg 等。
flags (整数):
- 可选参数。
- 指定读取图像的方式。不同的标志位会影响图像的加载方式。
- 常见的标志位包括:
- cv2.IMREAD_COLOR (默认值):加载彩色图像。任何透明度都将被忽略。这是默认标志。
- cv2.IMREAD_GRAYSCALE:以灰度模式加载图像。
- cv2.IMREAD_UNCHANGED:加载图像,包括 alpha 通道(如果有)。
- cv2.IMREAD_ANYCOLOR:根据图像内容选择最合适的色彩模式。
- cv2.IMREAD_ANYDEPTH:保留图像的深度信息(例如 16 位图像)。
- cv2.IMREAD_REDUCED_COLOR_2、cv2.IMREAD_REDUCED_COLOR_4、cv2.IMREAD_REDUCED_COLOR_8:分别将图像尺寸缩小为原来的一半、四分之一、八分之一。
- cv2.IMREAD_REDUCED_GRAYSCALE_2、cv2.IMREAD_REDUCED_GRAYSCALE_4、cv2.IMREAD_REDUCED_GRAYSCALE_8:分别将图像尺寸缩小为原来的一半、四分之一、八分之一,并以灰度模式加载。
返回值:
- 返回一个 NumPy 数组,表示图像的像素值。
- 如果图像文件不存在或无法读取,返回 None。
示例:
1. 默认加载彩色图像
import cv2
读取图像
image = cv2.imread('path/to/your/image.jpg')
检查图像是否成功读取
if image is None:
print("Error: Could not read image.")
else:
print("Image successfully read.")
2. 加载灰度图像
import cv2
读取灰度图像
gray_image = cv2.imread('path/to/your/image.jpg', cv2.IMREAD_GRAYSCALE)
检查图像是否成功读取
if gray_image is None:
print("Error: Could not read image.")
else:
print("Gray image successfully read.")
3. 加载包含 alpha 通道的图像
import cv2
读取包含 alpha 通道的图像
image_with_alpha = cv2.imread('path/to/your/image.png', cv2.IMREAD_UNCHANGED)
检查图像是否成功读取
if image_with_alpha is None:
print("Error: Could not read image.")
else:
print("Image with alpha channel successfully read.")
名词解释:
Alpha 通道是图像中的一个额外通道,用于表示透明度信息。通常,图像有三个颜色通道(红、绿、蓝,即 RGB),而带有 Alpha 通道的图像则有四个通道(红、绿、蓝、Alpha,即 RGBA)。Alpha 通道的值范围通常是 0 到 255,其中:
- 0 表示完全透明。
- 255 表示完全不透明。
- 中间值 表示不同程度的半透明。
Alpha 通道的应用场景:
图像合成:在图像合成中,Alpha 通道可以帮助将一个图像无缝地叠加到另一个背景上。
UI 设计:在用户界面设计中,Alpha 通道用于创建透明或半透明的按钮、图标等元素。
游戏开发:在游戏开发中,Alpha 通道用于创建透明或半透明的游戏对象,如粒子效果、烟雾等。
视频编辑:在视频编辑中,Alpha 通道用于实现复杂的视频合成效果。
4. 缩小图像并加载
import cv2
读取并缩小图像
reduced_image = cv2.imread('path/to/your/image.jpg', cv2.IMREAD_REDUCED_COLOR_2)
检查图像是否成功读取
if reduced_image is None:
print("Error: Could not read image.")
else:
print("Reduced image successfully read.")
(二)显示图像
cv2.imshow() 函数用于在一个窗口中显示图像。它的基本语法如下:
python
cv2.imshow(window_name, image)
参数说明
window_name (字符串):
- 窗口的名称。这个名称必须是唯一的,因为每个窗口都有一个唯一的名称。
- 例如:'Image Window'。
image (NumPy 数组):
- 要显示的图像。图像通常是一个三维数组(BGR 格式)或二维数组(灰度格式)。
- 例如:image = cv2.imread('path/to/your/image.jpg')。
示例代码
下面是一个简单的示例,展示如何使用 cv2.imshow() 显示图像:
import cv2
读取图像
image = cv2.imread('path/to/your/image.jpg')
检查图像是否成功读取
if image is None:
print("Error: Could not read image.")
else:
print("Image successfully read.")
显示图像
cv2.imshow('Image Window', image)
等待用户按键,0 表示无限等待
cv2.waitKey(0)
关闭所有 OpenCV 窦口
cv2.destroyAllWindows()
常见注意事项
1. 窗口管理:
- 使用 cv2.namedWindow() 可以创建一个窗口,并设置窗口的属性。例如,可以设置窗口是否可以调整大小。
- 例如:
cv2.namedWindow('Image Window', cv2.WINDOW_NORMAL) 创建一个可调整大小的窗口
2. 等待用户输入:
- cv2.waitKey(0) 会暂停程序,直到用户按下任意键。0 表示无限等待。
- 如果你需要等待特定的时间(毫秒),可以传入一个正整数。例如,cv2.waitKey(3000) 会等待 3 秒钟。
- 例如:
cv2.imshow('Image Window', image)
cv2.waitKey(3000) 等待 3 秒钟
3. 关闭窗口:
- 使用 cv2.destroyAllWindows() 可以关闭所有打开的窗口。
- 使用 cv2.destroyWindow(window_name) 可以关闭指定名称的窗口。
- 例如:
cv2.imshow('Image Window', image)
cv2.waitKey(0)
cv2.destroyWindow('Image Window') 关闭特定窗口
高级用法
1. 显示多张图像:
- 你可以在同一个程序中显示多张图像,只需为每张图像创建一个不同的窗口。
- 例如:
import cv2
读取图像
image1 = cv2.imread('path/to/your/image1.jpg')
image2 = cv2.imread('path/to/your/image2.jpg')
if image1 is None or image2 is None:
print("Error: Could not read one or more images.")
else:
print("Images successfully read.")
显示第一张图像
cv2.imshow('Image 1', image1)
显示第二张图像
cv2.imshow('Image 2', image2)
等待用户按键
cv2.waitKey(0)
关闭所有窗口
cv2.destroyAllWindows()
2. 动态更新图像:
- 在某些情况下,你可能需要在同一个窗口中动态更新图像。这可以通过在一个循环中多次调用 cv2.imshow() 实现。
- 例如:
import cv2
import numpy as np