目录
将输入图像加权累加到累加图像中 (accumulateWeighted)
将输入图像的平方累加到累加图像中 (accumulateSquare)
将两个输入图像的乘积累加到累加图像中 (accumulateProduct)
[使用 randu 生成均匀分布的随机数并添加噪声](#使用 randu 生成均匀分布的随机数并添加噪声)
[使用 randn 生成正态分布的随机数并添加噪声](#使用 randn 生成正态分布的随机数并添加噪声)
将数据从主成分空间反投影回原空间 (backProject)
http://t.csdnimg.cn/i8pqt ------ opencv---常用函数学习_"干货"_总(VIP)
散的正在一部分一部分发,不需要VIP。
资料整理不易,有用话给个赞和收藏吧。
二九、图像累加
在OpenCV中,图像累加是一个重要的操作,通常用于视频处理、背景建模和图像融合等任务。OpenCV提供了多种累加操作的函数,包括accumulate
、accumulateWeighted
、accumulateSquare
和 accumulateProduct
。下面介绍这些函数及其使用示例。
|---------------|--------------------|------------------|--------------------|
| 图像累加函数 ||||
| accumulate | accumulateWeighted | accumulateSquare | accumulateProduct |
| 将输入图像累加到累加图像中 | 将输入图像加权累加到累加图像中 | 将输入图像的平方累加到累加图像中 | 将两个输入图像的乘积累加到累加图像中 |
将输入图像累加到累加图像中 (accumulate
)
import cv2
import numpy as np
# 读取图像
image1 = cv2.imread('path_to_image1.jpg', cv2.IMREAD_GRAYSCALE)
image2 = cv2.imread('path_to_image2.jpg', cv2.IMREAD_GRAYSCALE)
# 初始化累加图像
accum_image = np.zeros_like(image1, dtype=np.float32)
# 执行累加操作
cv2.accumulate(image1, accum_image)
cv2.accumulate(image2, accum_image)
# 显示累加结果
cv2.imshow('Accumulated Image', cv2.convertScaleAbs(accum_image))
cv2.waitKey(0)
cv2.destroyAllWindows()
将输入图像加权累加到累加图像中 (accumulateWeighted
)
# 初始化累加图像
accum_image_weighted = np.zeros_like(image1, dtype=np.float32)
# 加权累加操作
alpha = 0.5
cv2.accumulateWeighted(image1, accum_image_weighted, alpha)
cv2.accumulateWeighted(image2, accum_image_weighted, alpha)
# 显示加权累加结果
cv2.imshow('Accumulated Weighted Image', cv2.convertScaleAbs(accum_image_weighted))
cv2.waitKey(0)
cv2.destroyAllWindows()
将输入图像的平方累加到累加图像中 (accumulateSquare
)
# 初始化累加图像
accum_image_square = np.zeros_like(image1, dtype=np.float32)
# 累加平方操作
cv2.accumulateSquare(image1, accum_image_square)
cv2.accumulateSquare(image2, accum_image_square)
# 显示累加平方结果
cv2.imshow('Accumulated Square Image', cv2.convertScaleAbs(accum_image_square))
cv2.waitKey(0)
cv2.destroyAllWindows()
将两个输入图像的乘积累加到累加图像中 (accumulateProduct
)
# 初始化累加图像
accum_image_product = np.zeros_like(image1, dtype=np.float32)
# 累加乘积操作
cv2.accumulateProduct(image1, image2, accum_image_product)
# 显示累加乘积结果
cv2.imshow('Accumulated Product Image', cv2.convertScaleAbs(accum_image_product))
cv2.waitKey(0)
cv2.destroyAllWindows()
解释
accumulate
函数:将输入图像累加到累加图像中,适用于累积多帧图像。accumulateWeighted
函数 :将输入图像加权累加到累加图像中,可以用于背景建模和图像融合,参数alpha
用于控制权重。accumulateSquare
函数:将输入图像的平方累加到累加图像中,适用于平方累加操作。accumulateProduct
函数:将两个输入图像的乘积累加到累加图像中,适用于乘积累加操作。
这些示例展示了如何使用OpenCV中的各种累加函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像处理任务。
三十、随机数与添加噪声
在OpenCV中,randu
和 randn
是两个用于生成随机数的函数,常用于图像处理中的噪声添加等操作。下面介绍这些函数及其使用示例。
|------------|----------------|
| 随机数生成与添加噪声函数 ||
| randu | randn |
| 生成均匀分布的随机数 | 生成正态(高斯)分布的随机数 |
使用 randu
生成均匀分布的随机数并添加噪声
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)
# 生成与图像大小相同的均匀分布噪声
noise = np.zeros_like(image, dtype=np.float32)
cv2.randu(noise, 0, 255)
# 将噪声添加到图像中
noisy_image = cv2.add(image.astype(np.float32), noise)
# 显示原图像和添加噪声后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Uniform Noise Image', noisy_image.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
使用 randn
生成正态分布的随机数并添加噪声
# 生成与图像大小相同的正态分布噪声
noise = np.zeros_like(image, dtype=np.float32)
cv2.randn(noise, 0, 25) # 均值为0,标准差为25
# 将噪声添加到图像中
noisy_image = cv2.add(image.astype(np.float32), noise)
# 显示原图像和添加噪声后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Gaussian Noise Image', noisy_image.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
解释
randu
函数:生成均匀分布的随机数。可以指定随机数的上下限。例如,在上述代码中,噪声值在0到255之间均匀分布。randn
函数:生成正态(高斯)分布的随机数。可以指定随机数的均值和标准差。例如,在上述代码中,噪声值服从均值为0,标准差为25的正态分布。
实际应用
在图像处理中,添加噪声常用于以下场景:
- 算法测试:在处理算法中测试其抗噪能力。
- 数据增强:在训练机器学习模型时,使用带噪声的数据增强模型的鲁棒性。
- 模拟真实情况:在某些情况下,需要模拟现实中的噪声以测试图像处理算法的性能。
通过这些示例,可以看到如何使用OpenCV中的randu
和randn
函数来生成随机数并将其添加到图像中作为噪声。根据具体的应用需求,可以灵活运用这些函数来实现图像处理任务。
三一、PCA
在OpenCV中,主成分分析(PCA)是一种常用的降维技术,广泛应用于图像处理和机器学习领域。OpenCV提供了几个用于PCA操作的函数:PCACompute
、project
和 backProject
。下面介绍这些函数及其使用示例。
|------------|-------------|------------------|
| PCA函数 |||
| PCACompute | project | backProject |
| 计算主成分 | 将数据投影到主成分空间 | 将数据从主成分空间反投影回原空间 |
计算主成分 (PCACompute
)
import cv2
import numpy as np
# 创建示例数据
data = np.array([[2.5, 2.4],
[0.5, 0.7],
[2.2, 2.9],
[1.9, 2.2],
[3.1, 3.0],
[2.3, 2.7],
[2, 1.6],
[1, 1.1],
[1.5, 1.6],
[1.1, 0.9]], dtype=np.float32)
# 计算PCA
mean, eigenvectors = cv2.PCACompute(data, mean=None)
print("Mean:\n", mean)
print("Eigenvectors:\n", eigenvectors)
将数据投影到主成分空间 (project
)
# 将数据投影到主成分空间
projected_data = cv2.PCAProject(data, mean, eigenvectors)
print("Projected Data:\n", projected_data)
将数据从主成分空间反投影回原空间 (backProject
)
# 将数据从主成分空间反投影回原空间
back_projected_data = cv2.PCABackProject(projected_data, mean, eigenvectors)
print("Back Projected Data:\n", back_projected_data)
解释
PCACompute
函数:计算数据的主成分。返回均值和特征向量(主成分)。project
函数:将数据投影到主成分空间。使用计算得到的均值和特征向量,将原数据转换到主成分空间。backProject
函数:将数据从主成分空间反投影回原空间。使用计算得到的均值和特征向量,将主成分空间的数据转换回原始数据空间。
实际应用
PCA在图像处理中有许多应用,例如:
- 图像压缩:通过保留主要成分,减少图像的维度,从而实现压缩。
- 特征提取:在图像分类和识别任务中,使用PCA提取主要特征,减少计算复杂度。
- 数据可视化:将高维数据降维到2D或3D空间,方便可视化。
图像压缩示例
# 读取图像并转换为灰度图
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)
image = np.float32(image) / 255.0
h, w = image.shape
# 将图像展开为2D数据
data = image.reshape((-1, w))
# 计算PCA,保留主要成分
mean, eigenvectors = cv2.PCACompute(data, mean=None, maxComponents=10)
# 投影到主成分空间
projected_data = cv2.PCAProject(data, mean, eigenvectors)
# 反投影回原空间
back_projected_data = cv2.PCABackProject(projected_data, mean, eigenvectors)
# 将数据重塑为图像
compressed_image = back_projected_data.reshape((h, w))
# 显示原图像和压缩后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Compressed Image', compressed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
通过这些示例,可以看到如何使用OpenCV中的PCA函数来处理数据和图像。根据具体的应用需求,可以灵活运用这些函数来实现数据降维和特征提取等任务。