一、前言
在图像处理领域,Python语言搭配OpenCV库是常用的工具组合。本文将介绍一些基本的图像处理操作,包括图像的读取、显示、保存、属性获取、通道操作以及简单的数学和逻辑运算。
- 图像的读取、显示和保存
- 图像属性的获取
- 通道的分离与合并
- 使用NumPy生成随机图像
- 图像逻辑运算及其真值表
二、图像读取与显示
2.1 图像读取函数:cv.imread()
功能:从文件系统加载图像
输入:文件路径字符串
输出:NumPy数组表示的图像数据
格式:cv.imread(path)
import cv2 as cv image = cv.imread("F:\SomeFiles\MSL_Project\pic1.jpg")
|
注意 可以使用原始字符串或者双反斜杠//来避免转义问题
import cv2 as cv image1 = cv.imread(r"F:\SomeFiles\MSL_Project\pic1.jpg") image2 = cv.imread("F:\\SomeFiles\\MSL_Project\\pic1.jpg")
|
2.2 图像显示函数
| 函数 |
功能 |
输入 |
输出 |
namedWindow() |
创建显示窗口 |
窗口名称 |
无 |
imshow() |
在窗口中显示图像 |
窗口名称, 图像数据 |
无 |
waitKey() |
等待键盘输入 |
等待时间(ms) |
按键值 |
destroyAllWindows() |
关闭所有窗口 |
无 |
无 |
import cv2 as cv image = cv.imread(r"F:\SomeFiles\MSL_Project\pic1.jpg") cv.namedWindow("image") cv.imshow("image", image) cv.waitKey(0) cv.destroyAllWindows()
|
三、图像保存
3.1 图像保存函数:cv.imwrite()
功能:将图像保存到文件系统
输入:文件路径, 图像数据
输出:布尔值(保存成功与否)
格式:cv.imwrite(path, image)
import cv2 as cv image = cv.imread(r"F:\SomeFiles\MSL_Project\pic1.jpg") cv.imwrite(r"F:\SomeFiles\MSL_Project\pic2.jpg", image)
|
四、图像属性获取
import cv2 as cv
image = cv.imread(r"F:\SomeFiles\MSL_Project\pic1.jpg")
print("image.shape", image.shape) print("image.size", image.size) print("image.dtype", image.dtype)
|
五、图像通道操作
5.1 通道分离函数:cv.split()
功能:将多通道图像分离为单通道图像
输入:多通道图像
输出:单通道图像元组
格式:b, g, r = cv.split(image)
import cv2 as cv
image = cv.imread("F:\\SomeFiles\\MSL_Project\\pic1.jpg") b, g, r = cv.split(image)
cv.imshow("Blue Channel", b) cv.imshow("Green Channel", g) cv.imshow("Red Channel", r) cv.waitKey(0) cv.destroyAllWindows()
|
5.2 通道合并函数:cv.merge()
功能:将单通道图像合并为多通道图像
输入:通道列表
输出:合并后的多通道图像
格式:image = cv.merge([b, g, r])
import cv2 as cv image = cv.imread(r"F:\SomeFiles\MSL_Project\pic1.jpg") b, g, r = cv.split(image) image_bgr = cv.merge([b, g, r])
cv.imshow("Original", image) cv.imshow("Merged", image_bgr) cv.waitKey(0) cv.destroyAllWindows()
|
六、NumPy图像生成
6.1 生成随机灰度图
import cv2 as cv import numpy as np
image_gray = np.random.randint(0, 256, size=[256, 256], dtype=np.uint8)
cv.imshow('Random Gray', image_gray) cv.waitKey(0) cv.destroyAllWindows()
|
6.2 生成随机彩色图
import cv2 as cv import numpy as np
image_color = np.random.randint(0, 256, size=[256, 256, 3], dtype=np.uint8)
cv.imshow('Random Color', image_color) cv.waitKey(0) cv.destroyAllWindows()
|
七、图像逻辑运算
7.1 按位运算函数
| 函数 |
功能 |
输入 |
输出 |
cv.bitwise_and() |
按位与运算 |
两个输入图像 |
与运算结果 |
cv.bitwise_or() |
按位或运算 |
两个输入图像 |
或运算结果 |
cv.bitwise_not() |
按位非运算 |
单个输入图像 |
非运算结果 |
cv.bitwise_xor() |
按位异或运算 |
两个输入图像 |
异或运算结果 |
7.2 逻辑运算真值表
按位与 (AND) 真值表
| A |
B |
A AND B |
| 0 |
0 |
0 |
| 0 |
1 |
0 |
| 1 |
0 |
0 |
| 1 |
1 |
1 |
按位或 (OR) 真值表
| A |
B |
A OR B |
| 0 |
0 |
0 |
| 0 |
1 |
1 |
| 1 |
0 |
1 |
| 1 |
1 |
1 |
按位非 (NOT) 真值表
按位异或 (XOR) 真值表
| A |
B |
A XOR B |
| 0 |
0 |
0 |
| 0 |
1 |
1 |
| 1 |
0 |
1 |
| 1 |
1 |
0 |
7.3 按位运算示例
import cv2 as cv import numpy as np
image1 = cv.imread(r"F:\SomeFiles\MSL_Project\pic1.jpg")
image2 = np.zeros(image1.shape, dtype=np.uint8) image2[100:400, 100:400] = 255
image_and = cv.bitwise_and(image1, image2) cv.imshow("AND Result", image_and)
image_or = cv.bitwise_or(image1, image2) cv.imshow("OR Result", image_or)
image_not = cv.bitwise_not(image1) cv.imshow("NOT Result", image_not)
image_xor = cv.bitwise_xor(image1, image2) cv.imshow("XOR Result", image_xor)
cv.waitKey(0) cv.destroyAllWindows()
|