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函数来处理数据和图像。根据具体的应用需求,可以灵活运用这些函数来实现数据降维和特征提取等任务。

相关推荐
云上艺旅13 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
你觉得20513 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
hyshhhh14 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
A旧城以西14 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
无所谓จุ๊บ14 小时前
VTK知识学习(50)- 交互与Widget(一)
学习·vtk
FAREWELL0007514 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法
吴梓穆15 小时前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5
Three~stone15 小时前
MySQL学习集--DDL
数据库·sql·学习
齐尹秦15 小时前
HTML 音频(Audio)学习笔记
学习
AndrewHZ15 小时前
【图像处理基石】什么是tone mapping?
图像处理·人工智能·算法·计算机视觉·hdr