目录
一、图像文件
1. imread:读取图像文件
2. imwrite:写入图像文件
3. imshow:显示图像
4. VideoCapture:捕获视频
二、创建Mat
1、创建Mat对象
2、操作Mat对象
三、矩阵算术运算
矩阵加法
矩阵减法
矩阵乘法
矩阵除法
四、数学运算
计算均值 (mean)
计算均值和标准差 (meanStdDev)
计算元素和 (sum)
找到最小值和最大值及其位置 (minMaxLoc)
计算非零元素的个数 (countNonZero)
计算矩阵的范数 (norm)
http://t.csdnimg.cn/i8pqt —— opencv—常用函数学习_“干货“_总(VIP)
散的正在一部分一部分发,不需要VIP。
资料整理不易,有用话给个赞和收藏吧。
一、图像文件
图像文件 | |||
---|---|---|---|
imread | imwrite | imshow | VideoCapture |
读取图像文件 | 写入图像文件 | 显示图像 | 捕获视频 |
1. imread
:读取图像文件
作用:从文件读取图像并存储在一个矩阵(数组)中。
使用场景:当需要从磁盘加载图像进行处理或分析时。
样例代码:
import cv2# 从文件读取图像
image = cv2.imread('path_to_image.jpg')# 检查图像是否读取成功
if image is None:print("图像读取失败")
else:print("图像读取成功")
2. imwrite
:写入图像文件
作用:将图像矩阵(数组)写入到文件。
使用场景:当需要保存处理后的图像到磁盘时。
样例代码:
import cv2# 读取图像
image = cv2.imread('path_to_image.jpg')# 处理图像(例如,转换为灰度图像)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 将处理后的图像写入文件
cv2.imwrite('path_to_save_image.jpg', gray_image)
3. imshow
:显示图像
作用:在窗口中显示图像。
使用场景:当需要在屏幕上查看图像或处理结果时。
样例代码:
import cv2# 读取图像
image = cv2.imread('path_to_image.jpg')# 显示图像
cv2.imshow('Image', image)# 等待按键按下
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()
4. VideoCapture
:捕获视频
作用:从摄像头或视频文件中捕获视频流。
使用场景:当需要从摄像头获取实时视频流或从文件中读取视频进行处理时。
样例代码:
import cv2# 打开摄像头(参数0表示第一个摄像头)
cap = cv2.VideoCapture(0)# 检查摄像头是否打开成功
if not cap.isOpened():print("无法打开摄像头")
else:while True:# 逐帧捕获ret, frame = cap.read()# 如果读取成功if ret:# 显示帧cv2.imshow('Video', frame)# 按下 'q' 键退出if cv2.waitKey(1) & 0xFF == ord('q'):breakelse:break# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()
二、创建Mat
在OpenCV中,Mat
对象是一个强大的矩阵类型,用于表示图像和矩阵数据。下面是一些常用的构造函数和方法,用于创建和操作Mat
对象。
创建Mat的构造函数 | ||
zeros | ones | eye |
创建一个所有元素为零的矩阵 | 创建一个所有元素为一的矩阵 | 创建一个单位矩阵(对角线元素为一,其他元素为零) |
操作函数 | ||
colRange | rowRange | Range |
获取指定列范围的子矩阵 | 获取指定行范围的子矩阵 | 表示一个范围 |
1、创建Mat
对象
创建一个所有元素为零的矩阵
import cv2
import numpy as np# 创建一个3x3的零矩阵
zero_matrix = np.zeros((3, 3), dtype=np.uint8)
print("Zero Matrix:\n", zero_matrix)
创建一个所有元素为一的矩阵
# 创建一个3x3的全一矩阵
one_matrix = np.ones((3, 3), dtype=np.uint8)
print("One Matrix:\n", one_matrix)
创建一个单位矩阵
# 创建一个3x3的单位矩阵
eye_matrix = np.eye(3, dtype=np.uint8)
print("Eye Matrix:\n", eye_matrix)
使用OpenCV中的函数和方法来创建和操作Mat
对象。可以根据需要组合这些方法来实现复杂的图像和矩阵操作任务。
2、操作Mat
对象
获取指定列范围的子矩阵
# 创建一个4x4的随机矩阵
matrix = np.random.randint(0, 256, (4, 4), dtype=np.uint8)
print("Original Matrix:\n", matrix)# 获取第1到第3列(不包括第3列)的子矩阵
col_sub_matrix = matrix[:, 1:3]
print("Column Range Matrix:\n", col_sub_matrix)
获取指定行范围的子矩阵
# 获取第1到第3行(不包括第3行)的子矩阵
row_sub_matrix = matrix[1:3, :]
print("Row Range Matrix:\n", row_sub_matrix)
表示一个范围(在此例中用于创建子矩阵)
# 表示从第1到第3列(不包括第3列)的范围
col_range = slice(1, 3)
print("Column Range:\n", matrix[:, col_range])# 表示从第1到第3行(不包括第3行)的范围
row_range = slice(1, 3)
print("Row Range:\n", matrix[row_range, :])
三、矩阵算术运算
在OpenCV中,Mat
对象支持基本的算术运算,这些运算可以用来对矩阵进行加法、减法、乘法和除法操作。下面分别介绍这些操作符的重载及其使用示例。
矩阵算术运算 | |||
+ (加法) | - (减法) | * (乘法) | / (除法) |
对两个矩阵进行元素逐个相加 | 对两个矩阵进行元素逐个相减 | 对两个矩阵进行元素逐个相乘 | 对两个矩阵进行元素逐个相除 |
矩阵加法
import cv2
import numpy as np# 创建两个矩阵
matrix1 = np.array([[1, 2], [3, 4]], dtype=np.uint8)
matrix2 = np.array([[5, 6], [7, 8]], dtype=np.uint8)# 矩阵加法
result_add = cv2.add(matrix1, matrix2)
print("Addition Result:\n", result_add)
矩阵减法
# 矩阵减法
result_sub = cv2.subtract(matrix1, matrix2)
print("Subtraction Result:\n", result_sub)
矩阵乘法
# 矩阵乘法(逐元素相乘)
result_mul = cv2.multiply(matrix1, matrix2)
print("Multiplication Result:\n", result_mul)
矩阵除法
# 矩阵除法(逐元素相除)
result_div = cv2.divide(matrix1, matrix2)
print("Division Result:\n", result_div)
通过这些示例代码,可以看到如何使用OpenCV中的操作符重载来对Mat
对象进行基本的算术运算。这些运算在图像处理和矩阵计算中非常常用,可以用于各种图像增强、滤波和特征提取任务。
四、数学运算
在OpenCV中,Mat
对象提供了丰富的数学运算功能,可以方便地对矩阵进行各种统计和算术运算。下面介绍一些常用的数学运算函数及其使用示例。
数学运算 | ||
mean | meanStdDev | sum |
计算矩阵的均值 | 计算矩阵的均值和标准差 | 计算矩阵元素的和 |
minMaxLoc | countNonZero | norm |
找到矩阵中的最小值和最大值及其位置 | 计算矩阵中非零元素的个数 | 计算矩阵的范数(如L2范数) |
计算均值 (mean
)
import cv2
import numpy as np# 创建一个矩阵
matrix = np.array([[1, 2], [3, 4]], dtype=np.uint8)# 计算矩阵的均值
mean_val = cv2.mean(matrix)
print("Mean Value:", mean_val)
计算均值和标准差 (meanStdDev
)
# 计算矩阵的均值和标准差
mean_val, stddev_val = cv2.meanStdDev(matrix)
print("Mean Value:", mean_val)
print("Standard Deviation:", stddev_val)
计算元素和 (sum
)
# 计算矩阵元素的和
sum_val = cv2.sumElems(matrix)
print("Sum of Elements:", sum_val)
找到最小值和最大值及其位置 (minMaxLoc
)
# 找到矩阵中的最小值和最大值及其位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(matrix)
print("Minimum Value:", min_val, "at", min_loc)
print("Maximum Value:", max_val, "at", max_loc)
计算非零元素的个数 (countNonZero
)
# 计算矩阵中非零元素的个数
nonzero_count = cv2.countNonZero(matrix)
print("Number of Non-Zero Elements:", nonzero_count)
计算矩阵的范数 (norm
)
# 计算矩阵的L2范数
norm_val = cv2.norm(matrix, cv2.NORM_L2)
print("L2 Norm of the Matrix:", norm_val)
通过这些示例代码,可以了解如何使用OpenCV中的这些数学运算函数来对Mat
对象进行各种统计和算术运算。这些函数在图像处理、特征提取和数据分析中非常有用。