当前位置: 首页 > 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…...

麒麟系统openkylin性能调优实战:Unixbench跑分从100到900的完整指南

麒麟系统OpenKylin性能调优实战:UnixBench跑分从100到900的完整指南 在国产操作系统逐渐成熟的今天,OpenKylin作为麒麟家族的重要成员,其性能表现越来越受到开发者和系统管理员的关注。UnixBench作为经典的Unix-like系统性能测试工具&#xf…...

OpenClaw+GLM-4.7-Flash:自动化内容创作全流程实战

OpenClawGLM-4.7-Flash:自动化内容创作全流程实战 1. 为什么需要自动化内容创作 作为一个经常需要产出技术文档的开发者,我发现自己总是陷入类似的困境:每次开始写作前,要花大量时间收集资料、整理思路、调整格式。最痛苦的是&a…...

GuwenBERT:重构古文智能理解的3个技术维度

GuwenBERT:重构古文智能理解的3个技术维度 【免费下载链接】guwenbert GuwenBERT: 古文预训练语言模型(古文BERT) A Pre-trained Language Model for Classical Chinese (Literary Chinese) 项目地址: https://gitcode.com/gh_mirrors/gu/g…...

Go 并发编程的常见陷阱

Go语言凭借轻量级协程和高效的并发模型,成为高并发场景的热门选择。其简洁的并发语法背后隐藏着诸多陷阱,稍有不慎就会引发数据竞争、死锁等问题。本文将剖析三个典型并发陷阱,帮助开发者避开暗礁,写出健壮的并发程序。**共享变量…...

YOLO11 vs YOLOv8 实测对比:在自定义数据集上,精度和速度到底提升了多少?

YOLO11 vs YOLOv8 深度实测:工业场景下的精度与效率抉择 当生产线上的摄像头每秒捕获30帧图像时,算法每增加1%的误检率就意味着每小时可能多出上百次错误警报。这正是我们在某汽车零部件缺陷检测项目中面临的现实挑战——选择YOLOv8还是新发布的YOLO11&a…...

MinIO搭配Nginx部署,除了反向代理解决CORS,这些安全与性能配置你也该知道

MinIO与Nginx生产级部署:从CORS解决到安全性能全栈优化 当对象存储服务MinIO遇上高性能Web服务器Nginx,两者的结合能为企业级应用带来怎样的化学反应?这不仅仅是简单的反向代理配置,而是一套涵盖安全加固、性能调优、高可用设计的…...

电商老板必看:用Excel的IF和VLOOKUP函数,轻松算出你的新老客户利润贡献比

电商精细化运营:用Excel透视新老客户利润贡献的实战指南 对于中小电商企业主来说,理解客户结构是精细化运营的第一步。你可能没有专业的BI工具,但Excel这个看似普通的办公软件,却能帮你挖掘出惊人的商业洞察。本文将带你一步步构建…...

Qt 6.5 + DeepSeek API 流式聊天实战:手把手教你打造一个带记忆的桌面AI助手

Qt 6.5 DeepSeek API 流式聊天实战:打造带记忆的桌面AI助手 在当今软件开发领域,AI助手的集成已成为提升用户体验的重要趋势。想象一下,在你的代码编辑器或笔记软件中,有一个能理解上下文、实时响应且具备记忆能力的智能助手&…...

Nanbeige4.1-3B vLLM模型水印:输出内容可追溯的版权保护技术实现

Nanbeige4.1-3B vLLM模型水印:输出内容可追溯的版权保护技术实现 1. 引言:当AI生成内容遇上版权难题 你有没有想过,如果AI帮你写了一篇文章、一段代码或者一个创意方案,这份成果的“所有权”到底归谁?随着像Nanbeige…...

StarUML6.3.1安装全攻略:从环境配置到破解实战

1. StarUML 6.3.1安装前的准备工作 StarUML作为一款强大的建模工具,在软件开发和系统设计中扮演着重要角色。6.3.1版本在功能和稳定性上都有显著提升,但安装过程可能会让新手感到困惑。在开始安装之前,我们需要做好以下准备工作: …...