一、前言

  在图像处理领域,Python语言搭配OpenCV库是常用的工具组合。本文将介绍一些基本的图像处理操作,包括图像的读取、显示、保存、属性获取、通道操作以及简单的数学和逻辑运算。

  1. 图像的读取、显示和保存
  2. 图像属性的获取
  3. 通道的分离与合并
  4. 使用NumPy生成随机图像
  5. 图像逻辑运算及其真值表

二、图像读取与显示

2.1 图像读取函数:cv.imread()

功能:从文件系统加载图像
输入:文件路径字符串
输出:NumPy数组表示的图像数据
格式cv.imread(path)

import cv2 as cv  # 导入OpenCV库
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") # 创建名为"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) # 分离BGR通道

# 显示各通道图像
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

# 创建256x256随机灰度图像
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

# 创建256x256随机彩色图像
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) 真值表

A NOT A
0 1
1 0

按位异或 (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()