opencv—常用函数学习_“干货“_11

目录

二九、图像累加

将输入图像累加到累加图像中 (accumulate)

将输入图像加权累加到累加图像中 (accumulateWeighted)

将输入图像的平方累加到累加图像中 (accumulateSquare)

将两个输入图像的乘积累加到累加图像中 (accumulateProduct)

解释

三十、随机数与添加噪声

[使用 randu 生成均匀分布的随机数并添加噪声](#使用 randu 生成均匀分布的随机数并添加噪声)

[使用 randn 生成正态分布的随机数并添加噪声](#使用 randn 生成正态分布的随机数并添加噪声)

解释

实际应用

三一、PCA

计算主成分 (PCACompute)

将数据投影到主成分空间 (project)

将数据从主成分空间反投影回原空间 (backProject)

解释

实际应用

图像压缩示例

http://t.csdnimg.cn/i8pqt ------ opencv---常用函数学习_"干货"_总(VIP)

散的正在一部分一部分发,不需要VIP。

资料整理不易,有用话给个赞和收藏吧。


二九、图像累加

在OpenCV中,图像累加是一个重要的操作,通常用于视频处理、背景建模和图像融合等任务。OpenCV提供了多种累加操作的函数,包括accumulateaccumulateWeightedaccumulateSquareaccumulateProduct。下面介绍这些函数及其使用示例。

|---------------|--------------------|------------------|--------------------|
| 图像累加函数 ||||
| 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中,randurandn 是两个用于生成随机数的函数,常用于图像处理中的噪声添加等操作。下面介绍这些函数及其使用示例。

|------------|----------------|
| 随机数生成与添加噪声函数 ||
| 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的正态分布。

实际应用

在图像处理中,添加噪声常用于以下场景:

  1. 算法测试:在处理算法中测试其抗噪能力。
  2. 数据增强:在训练机器学习模型时,使用带噪声的数据增强模型的鲁棒性。
  3. 模拟真实情况:在某些情况下,需要模拟现实中的噪声以测试图像处理算法的性能。

通过这些示例,可以看到如何使用OpenCV中的randurandn函数来生成随机数并将其添加到图像中作为噪声。根据具体的应用需求,可以灵活运用这些函数来实现图像处理任务。

三一、PCA

在OpenCV中,主成分分析(PCA)是一种常用的降维技术,广泛应用于图像处理和机器学习领域。OpenCV提供了几个用于PCA操作的函数:PCAComputeprojectbackProject。下面介绍这些函数及其使用示例。

|------------|-------------|------------------|
| 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在图像处理中有许多应用,例如:

  1. 图像压缩:通过保留主要成分,减少图像的维度,从而实现压缩。
  2. 特征提取:在图像分类和识别任务中,使用PCA提取主要特征,减少计算复杂度。
  3. 数据可视化:将高维数据降维到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函数来处理数据和图像。根据具体的应用需求,可以灵活运用这些函数来实现数据降维和特征提取等任务。

相关推荐
Code哈哈笑8 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
QQ同步助手1 小时前
如何正确使用人工智能:开启智慧学习与创新之旅
人工智能·学习·百度
流浪的小新1 小时前
【AI】人工智能、LLM学习资源汇总
人工智能·学习
A懿轩A2 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
黑色叉腰丶大魔王3 小时前
基于 MATLAB 的图像增强技术分享
图像处理·人工智能·计算机视觉
南宫生10 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__10 小时前
Web APIs学习 (操作DOM BOM)
学习
数据的世界0112 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐12 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
菜狗woc12 小时前
opencv-python的简单练习
人工智能·python·opencv