当前位置: 首页 > news >正文

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

目录

二九、图像累加

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

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

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

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

解释

三十、随机数与添加噪声

使用 randu 生成均匀分布的随机数并添加噪声

使用 randn 生成正态分布的随机数并添加噪声

解释

实际应用

三一、PCA

计算主成分 (PCACompute)

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

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

解释

实际应用

图像压缩示例

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

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

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


二九、图像累加

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

图像累加函数
accumulateaccumulateWeightedaccumulateSquareaccumulateProduct
将输入图像累加到累加图像中将输入图像加权累加到累加图像中将输入图像的平方累加到累加图像中将两个输入图像的乘积累加到累加图像中

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

随机数生成与添加噪声函数
randurandn
生成均匀分布的随机数生成正态(高斯)分布的随机数
使用 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函数
PCAComputeprojectbackProject
计算主成分将数据投影到主成分空间将数据从主成分空间反投影回原空间

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

http://www.lryc.cn/news/402075.html

相关文章:

  • WSL-Ubuntu20.04部署环境配置
  • 6Python的Pandas:数据读取与输出
  • ubuntu 网络 通讯学习笔记2
  • 深入理解JS中的事件委托
  • Camera Raw:首选项
  • HLS加密技术:保障流媒体内容安全的利器
  • 捷配总结的SMT工厂安全防静电规则
  • UE4-初见虚幻引擎
  • 基于Vue CLI 3构建Vue3项目(Vue2也可参考)
  • Midjourney 绘画提示词汇总:让你的 AI 绘画与众不同
  • React和Vue.js的相似性和差异性是什么?
  • Nginx 和 PHP(特别是使用 Swoole 扩展)的配置和调优
  • Kafka Producer发送消息流程之消息异步发送和同步发送
  • Flutter 状态管理调研总结
  • 入门C语言只需一个星期(星期二)
  • 切换node版本
  • 【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)
  • ssrf复习(及ctfshow351-360)
  • 请求通过Spring Cloud Gateway 503
  • C++代码_让室友坑我
  • AG32 的MCU与FPGA的主频可以达到568MHz吗
  • 怎样减少视频的容量 怎样减少视频内存保持清晰度
  • 谈一谈一条SQL的查询、更新语句究竟是如何执行的?
  • 自动驾驶AVM环视算法–全景和标定全功能算法实现和exe测试demo
  • 【Docker 系列】学习路线
  • 蓝色系信息工作室建站网站源码系统 带模版手机端 带完整的源代码包以及搭建部署教程
  • 什么是带宽限制,如何影响服务器数据传输?
  • RISC-V在线反汇编工具
  • 从零手写实现 nginx-32-load balance 负载均衡算法 java 实现
  • 基于STC89C51单片机的烟雾报警器设计(煤气火灾检测报警)(含文档、源码与proteus仿真,以及系统详细介绍)