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

相关文章:

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

目录 二九、图像累加 将输入图像累加到累加图像中 (accumulate) 将输入图像加权累加到累加图像中 (accumulateWeighted) 将输入图像的平方累加到累加图像中 (accumulateSquare) 将两个输入图像的乘积累加到累加图像中 (accumulateProduct) 解释 三十、随机数与添加噪声 …...

WSL-Ubuntu20.04部署环境配置

1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速,需要安装以下环境,下面将按以下顺序分别介绍安装、验证以及删除环境: #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…...

6Python的Pandas:数据读取与输出

Pandas是一个强大的Python数据分析库,提供了读取和输出数据的多种功能。以下是一些常见的数据读取与输出方法: 1. 读取CSV 读取数据 从CSV文件读取数据 import pandas as pd# 读取CSV文件 df pd.read_csv(file_path.csv) print(df.head())从Excel文…...

ubuntu 网络 通讯学习笔记2

1.ubuntu 网络常用命令 在Ubuntu中,有许多网络相关的常用命令。以下是一些主要命令及其用途: ifconfig:此命令用于显示和配置网络接口信息。你可以使用它来查看IP地址、子网掩码、广播地址等。 例如:ifconfig 注意&#xff1a…...

深入理解JS中的事件委托

JavaScript中的事件委托是一种非常有用的事件处理模式,它允许我们利用事件模型的事件冒泡阶段来减少事件处理器的数量,提高网页性能。本文将介绍事件委托的概念、工作原理、优点以及如何在实际项目中应用事件委托。 1、事件模型 事件模型指在Web开发中,处理和管理事件(如…...

Camera Raw:首选项

Camera Raw 首选项 Preferences提供了丰富的配置选项,通过合理设置,可以显著提升图像处理的效率和效果。根据个人需求调整这些选项,有助于创建理想的工作环境和输出质量。 ◆ ◆ ◆ 打开 Camera Raw 首选项 方法一:在 Adobe Bri…...

HLS加密技术:保障流媒体内容安全的利器

随着网络视频内容的爆炸性增长,如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS(HTTP Live Streaming)加密技术作为一种先进的流媒体加密手段,凭借其高效性和安全性,在直播、点播等场景中得到了广泛应…...

捷配总结的SMT工厂安全防静电规则

SMT工厂须熟记的安全防静电规则! 安全对于我们非常重要,特别是我们这种SMT加工厂,通常我们所讲的安全是指人身安全。 但这里我们须树立一个较为全面的安全常识就是在强调人身安全的同时亦必须注意设备、产品的安全。 电气: 怎样预…...

UE4-初见虚幻引擎

一.创建自己的工程 1.启动 a.通过桌面双击图标来打开对应版本的虚幻引擎 b.通过EPIC启动器开启动虚幻引擎 2.选择或新建项目 ps:高版本虚幻编辑器可以打开低版本的虚幻项目,但是高版本虚幻的项目不可以由低版本的虚幻编辑器打开。 3. 选择要打开的项目 4.选择模版 选…...

基于Vue CLI 3构建Vue3项目(Vue2也可参考)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

Midjourney 绘画提示词汇总:让你的 AI 绘画与众不同

在 AI 技术迅速发展的今天,AI 绘画已经成为了创意工作中的一大利器。Midjourney 作为其中的佼佼者,以其强大的绘画能力和高质量的输出受到了广大用户的喜爱。为了帮助你充分发挥 Midjourney 的潜力,我们整理了一些能够让 AI 绘画与众不同的提…...

React和Vue.js的相似性和差异性是什么?

React 和 Vue.js 都是流行的前端 JavaScript 框架,它们有一些相似性和差异性: 相似性: 组件化:React 和 Vue.js 都支持组件化开发,允许开发者将界面拆分为独立的组件,提高代码的复用性和可维护性。…...

Nginx 和 PHP(特别是使用 Swoole 扩展)的配置和调优

针对千万级用户的高并发应用,Nginx 和 PHP(特别是使用 Swoole 扩展)的配置和调优是至关重要的。 以下是详细的配置和调优建议: Nginx 配置和调优 工作进程数(worker_processes): 根据 CPU 核心…...

Kafka Producer发送消息流程之消息异步发送和同步发送

文章目录 1. 异步发送2. 同步发送 1. 异步发送 Kafka默认就是异步发送,在Main线程中的多条消息,没有严格的先后顺序,Sender发送后就继续下一条,异步接受结果。 public class KafkaProducerCallbackTest {public static void mai…...

Flutter 状态管理调研总结

一, 候选状态管理组件简介 0. flutter_hooks 一个 React 钩子在 Flutter 上的实现:Making Sense of React Hooks 钩子是一种用来管理 Widget 生命周期的新对象,以减少重复代码、增加组件间复用性,允许将视图逻辑提取到通用的用例中并重用&…...

入门C语言只需一个星期(星期二)

点击上方"蓝字"关注我们 01、算术运算符 int myNum = 100 + 50;int sum1 = 100 + 50; // 150 (100 + 50)int sum2 = sum1 + 250; // 400 (150 + 250)int sum3 = sum2 + sum2; // 800 (400 + 400) + 加 将两个值相加 x + y - 减 从另一个值中减去一个值 …...

切换node版本

一、在Linux上切换Node.js版本有多种实现方法: 1.使用nvm(Node Version Manager): 安装nvm:可以通过curl或wget来安装nvm,具体请参考nvm的官方文档。 安装不同版本的Node.js:使用nvm可以轻松…...

【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)

目录: 目录: 一、 Base64概述和应用场景 1.1 概述 1.2 应用场景 二、Base16 2.1 Base16编码 2.2 Base16编解码 三、Base64 四、OpenSSL BIO接☐ 4.1 Filter BIOs: 4.2 Source/Sink BIOs: 4.3 应用场景: 4.4 具体使用&…...

ssrf复习(及ctfshow351-360)

1. SSRF 概述 服务器会根据用户提交的URL发送一个HTTP请求。使用用户指定的URL,Web应用可以获取图片或者文件资源等。典型的例子是百度识图功能。 如果没有对用户提交URL和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造"的缺陷…...

请求通过Spring Cloud Gateway 503

最近想处理一个通用的网关服务。 但是我在处理好所有配置的时候发现,网络请求过网关的时候,一直503,我所有的配置都没问题。 环境: JDK: 17 Spring Cloud: 2023.0.2 在 Spring Cloud Gateway 的早期版本中&#xff…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...