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

嵌入式人工智能应用-第三章 opencv操作3 图像平滑操作 下

5 高斯噪声(Gaussian Noise)

高斯噪声(Gaussian Noise)是一种符合正态(高斯)分布的随机噪声,广泛存在于传感器采集、信号传输等场景中。以下是关于高斯噪声的详细说明、添加方法及滤波方案。

特点:符合正态分布,模拟传感器噪声。
噪声值服从正态分布 在这里插入图片描述
其中:
μ(均值):通常为 0(对称分布);σ
σ(标准差):控制噪声强度(值越大,噪声越明显)

视觉表现:图像上出现细密的颗粒状噪声,类似“电视雪花”效果。

5.1 加入噪声

void addGaussianNoise(cv::Mat &image, double mean=0, double stddev=15) {cv::Mat noise = cv::Mat::zeros(image.size(), image.type());cv::randn(noise, mean, stddev); // 生成高斯噪声image += noise;cv::normalize(image, image, 0, 255, cv::NORM_MINMAX, image.type()); // 防止溢出
}

在这里插入图片描述

5.2 高斯滤波

原理:使用高斯核加权平均,与噪声分布特性匹配。

优点:计算高效,适合实时处理。

OpenCV 函数:cv::GaussianBlur()

函数原型:

void cv::GaussianBlur(InputArray src, OutputArray dst,Size ksize, double sigmaX,double sigmaY = 0,int borderType = BORDER_DEFAULT
);

参数:

ksize Size 高斯核大小(宽度和高度,必须为正奇数如3x3、5x5)。
sigmaX double X方向标准差。若为0,则自动从ksize计算:sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8
sigmaY double Y方向标准差(默认=0,表示与sigmaX相同)。
borderType int 边界填充方式(默认BORDER_DEFAULT)。

参考应用:

cv::Mat denoised;
cv::GaussianBlur(noisy_img, denoised, cv::Size(5, 5), 1.5); // 内核大小5x5,标准差1.5

在这里插入图片描述

5.4 双边滤波(Bilateral Filter)

原理:同时考虑空间距离和像素值差异,保留边缘。
bilateralFilter 为双边滤波,d 为计算的半径,在 d 以内的像素点会被纳入计算,如果 d=-1,则根据 sigmas 参数取值进行处理。Sigmac 决定多少差值之内的像素点会被计算。Sigmas 和 d 的值有关,如果 d 大于0,该值无效,如果小于 0,则根据 sigmas 来计算 d 的值。

优点:边缘保持效果好。

OpenCV 函数:cv::bilateralFilter()

cv::Mat denoised;
cv::bilateralFilter(noisy_img, denoised, 9, 75, 75); // 直径9,颜色/空间标准差75

在这里插入图片描述

5.5 总结

在这里插入图片描述

6 椒盐噪声(Salt-and-Pepper Noise)

椒盐噪声是一种常见的图像噪声,表现为随机出现的 纯白(盐噪声) 和 纯黑(椒噪声) 像素点,通常由传感器故障、信号传输错误或存储介质损坏引起。以下是其特性、添加方法及去噪方案。

6.1 定义

噪声像素值为 0(黑) 或 255(白),随机分布在图像中
在这里插入图片描述
视觉表现:图像上散落黑白点,类似胡椒和盐粒。

6.2 添加椒盐噪声

  #include "random"
void addSaltPepperNoise(cv::Mat &image, double prob = 0.05) {std::random_device rd;std::mt19937 gen(rd());std::uniform_real_distribution<> dis(0.0, 1.0);for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++) {double r = dis(gen);if (r < prob / 2) {image.at<cv::Vec3b>(i, j) = cv::Vec3b(0, 0, 0);    // 椒噪声(黑)} else if (r < prob) {image.at<cv::Vec3b>(i, j) = cv::Vec3b(255, 255, 255); // 盐噪声(白)}}}
}

在这里插入图片描述

6.3 中值滤波(Median Filter)

原理:用邻域像素的中值替代中心像素,有效消除孤立噪点。

优点:计算快,适合实时处理。

OpenCV 函数:cv::medianBlur()

cv::Mat denoised;
cv::medianBlur(noisy_img, denoised, 5); // 内核大小5x5(必须为奇数)

medianBlur 为中值滤波,ksize 为中值滤波的窗口大小。
在这里插入图片描述

6.5 总结

在这里插入图片描述

7 参考案例

7.1 模糊案例

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main (int argc,char **argv)
{Mat src = imread("cyq.jpg",1);if(src.empty()){cout << "Could not load image.."<<endl;return -1;}Mat image1,image2,image3;blur(src,image1,Size(3,3),Point(-1,-1));blur(src,image2,Size(29,1),Point(-1,-1));blur(src,image3,Size(1,20),Point(-1,-1));imshow("input",src);imshow("output1",image1);imshow("output2",image2);imshow("output3",image3);waitKey(0);return 0;
}

这部分代码很简单,使用 mat 将图像信息装起来,然后调用 OpenCV 提供的 blur 接口进行模糊,通过调整 Size 参数来看看均值滤波的效果。第一次调用 Size(3,3),表示卷积算子的大小为 3*3,这个值是可以随意改变的,但必须是正数,后面的 Point 表示采用卷积算子的中心点为计算结果。后面将 size 中的参数改变,例如 Size(29,1)是 x 方向的模糊,因为我们平时看到的移动都是相对于地面的,所以转换出来的图像像是瞬间移动了;Size(1,20)是在 y 方向的模糊,看起来像是向上跳跃的感觉。

7.1 中值滤波

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main (int argc,char **argv)
{Mat src = imread("nn.png",1);if(src.empty()){cout << "Could not load image.."<<endl;return -1;}Mat dst;medianBlur(src,dst,3);imshow("input",src);imshow("output",dst);waitKey(0);return 0;
}

在这里插入图片描述

相关文章:

嵌入式人工智能应用-第三章 opencv操作3 图像平滑操作 下

5 高斯噪声&#xff08;Gaussian Noise&#xff09; 高斯噪声&#xff08;Gaussian Noise&#xff09;是一种符合正态&#xff08;高斯&#xff09;分布的随机噪声&#xff0c;广泛存在于传感器采集、信号传输等场景中。以下是关于高斯噪声的详细说明、添加方法及滤波方案。 …...

OSPF的接口网络类型【复习篇】

OSPF在不同网络环境下默认的不同工作方式 [a3]display ospf interface g 0/0/0 # 查看ospf接口的网络类型网络类型OSPF接口的网络类型&#xff08;工作方式&#xff09;计时器BMA&#xff08;以太网&#xff09;broadcast &#xff0c;需要DR/BDR的选举hello&#xff1a;10s…...

maven编译jar踩坑[sqlite.db]

背景&#xff1a; 最近在项目中搞多数据源切换的job,在src/resource下有初始化的sqlite默认文件供后续拷贝使用&#xff0c;在测试阶段没有什么问题&#xff0c;但是一部署到服务器上运行就有问题。 报错现象&#xff1a; 找不到这个sqlite.db文件或者文件格式有问题&#x…...

【软考系统架构设计师】软件工程

1、 软件开发生命周期 软件定义时期&#xff1a;包括可行性研究和详细需求分析过程&#xff0c;任务是确定软件开发工程必须完成的总目标&#xff0c;具体分为问题定义、可行性研究、需求分析等 软件开发时期&#xff1a;软件的设计与实现&#xff0c;分为概要设计、详细设计、…...

蓝桥杯单片机刷题——ADC测量电位器的电压

设计要求 通过PCF8591的ADC通道测量电位器RB2的输出电压&#xff0c;并使用套件上提供的USB转串口功能&#xff0c;完成下列程序设计要求。 串口每次接收包含5个字符的字符串&#xff0c; 1&#xff09;若接收的5个字符中有字符’a’或’A’&#xff0c;则数码管显示一位小数…...

零基础上手Python数据分析 (12):DataFrame 数据清洗与预处理 (下) - 类型转换、格式化、文本与日期处理

写在前面 上一篇博客,我们学习了如何使用 Pandas 处理数据分析中最常见的 “脏数据”:缺失值、重复值和异常值。 这为我们处理数据质量问题打下了坚实的基础。 然而,数据清洗的挑战远不止于此。 在实际数据中,我们还会经常遇到 数据类型不一致、数据格式不规范、文本数据混…...

免费下载 | 2025清华五道口:“十五五”金融规划研究白皮书

《2025清华五道口&#xff1a;“十五五”金融规划研究白皮书》的核心内容主要包括以下几个方面&#xff1a; 一、五年金融规划的重要功能与作用 凝聚共识&#xff1a;五年金融规划是国家金融发展的前瞻性谋划和战略性安排&#xff0c;通过广泛听取社会各界意见&#xff0c;凝…...

制造一只电子喵 (qwen2.5:0.5b 微调 LoRA 使用 llama-factory)

AI (神经网络模型) 可以认为是计算机的一种新的 “编程” 方式. 为了充分利用计算机, 只学习传统的编程 (编程语言/代码) 是不够的, 我们还要掌握 AI. 本文以 qwen2.5 和 llama-factory 举栗, 介绍语言模型 (LLM) 的微调 (LoRA SFT). 为了方便上手, 此处选择使用小模型 (qwen2…...

Java中parallelStream并行流使用指南

Java中parallelStream并行流使用指南 在 Java 中&#xff0c;parallelStream() 是 Java 8 引入的一个用于并行处理集合数据的工具&#xff0c;它基于 Fork/Join框架 实现&#xff0c;能够自动将任务拆分成子任务并利用多核处理器并行执行。以下是对 parallelStream的详细说明和…...

Python及C++中的列表

一、Python中的列表&#xff08;List&#xff09; Python的列表是动态数组&#xff0c;内置于语言中&#xff0c;功能强大且易用&#xff0c;非常适合算法竞赛。 1. 基本概念 定义&#xff1a;列表是一个有序、可变的序列&#xff0c;可以存储任意类型的元素&#xff08;整数…...

mybatis plus 分页查询出来数据后对他二次 修改数据 封装返回

mybatis plus 分页查询出来数据后对他二次 修改数据 封装返回 /*** 搜索问卷** param keyword* param pageNo* param pageSize* return*/AutoLog(value "v_survey-搜索")ApiOperation(value"v_survey-搜索", notes"v_survey-搜索")GetMapping(v…...

海洋大地测量基准与水下导航系列之八我国海洋水下定位装备发展现状

中国国家综合PNT体系建设重点可概括为“51N”&#xff0c;“5”指5大基础设施&#xff0c;包括重点推进下一代北斗卫星导航系统、积极发展低轨导航增强系统、按需发展水下导航系统、大力发展惯性导航系统、积极探索脉冲星导航系统&#xff1b;“1”是实现1个融合发展&#xff0…...

基于单片机的电梯智能识别电动车阻车系统设计与实现

标题:基于单片机的电梯智能识别电动车阻车系统设计与实现 内容:1.摘要 随着电动车在日常生活中的普及&#xff0c;将电动车带入电梯带来的安全隐患日益凸显&#xff0c;如引发火灾等。本研究的目的是设计并实现一种基于单片机的电梯智能识别电动车阻车系统。方法上&#xff0c…...

什么是柜台债

柜台债&#xff08;柜台债券业务&#xff09;是指通过银行等金融机构的营业网点或电子渠道&#xff0c;为投资者提供债券买卖、托管、结算等服务的业务模式。它允许个人、企业及机构投资者直接参与银行间债券市场的交易&#xff0c;打破了以往仅限机构参与的壁垒。以下是综合多…...

.py文件和.ipynb文件的区别:完整教程

一、概述 Python开发者常用的两种文件格式.py和.ipynb各有特点&#xff0c;本教程将通过对比分析、代码示例和场景说明&#xff0c;帮助开发者全面理解二者的区别与联系。 二、核心区别对比 1. 文件格式本质 特性.ipynb文件.py文件文件类型JSON结构化文档纯文本文件存储内容…...

Python中NumPy的逻辑和比较

在数据科学和科学计算领域&#xff0c;NumPy是一个不可或缺的Python库。它提供了高效的多维数组对象以及丰富的数组操作函数&#xff0c;其中逻辑和比较操作是NumPy的核心功能之一。通过灵活运用这些操作&#xff0c;我们可以轻松实现数据筛选、条件判断和复杂的数据处理任务。…...

tt_Docker

快速上手 查看 Docker 服务运行状态;查看本地镜像;从 Docker Hub 拉取基础镜像, 我们此处选择 ubuntu:18.04 镜像;再次查看本地镜像;使用 ubuntu:18.04 镜像构建容器&#xff0c;并交互式运行容器&#xff1b;在容器内部执行 LS 命令;退出容器;查看本地容器实例;再次启动停止的…...

虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?

虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解&#xff1f; code review! 文章目录 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解&#xff1f;理解这句话的关键点1.类&#xff08…...

compose map 源码解析

目录 TileCanvas ZoomPanRotateState ZoomPanRotate 布局,手势处理完了,就开始要计算tile了 MapState TileCanvasState telephoto的源码已经分析过了.它的封装好,扩展好,适用于各种view. 最近又看到一个用compose写的map,用不同的方式,有点意思.分析一下它的实现流程与原…...

IDEA202403 常用设置【持续更新】

文章目录 1、设置maven2、设置JDK3、菜单栏固定展示4、连接Gitee第一步、安装插件第二步、Gitee账号配置 IDEA 是程序员的编程利器&#xff0c;需要具备其的各种配置&#xff0c;提高工作效率。Java项目启动&#xff0c;两个关键设置&#xff1a;Maven 和 JDK设置。 1、设置mav…...

从零开始开发纯血鸿蒙应用之语音输入

从零开始开发纯血鸿蒙应用 〇、前言一、认识 speechRecognizer1、使用方式2、依赖权限3、结果回写 二、实现语音识别功能1、创建语音识别引擎2、设置事件监听3、启动识别4、写入音频数据5、操作控制 三、总结 〇、前言 除了从图片中识别文本外&#xff0c;语音输入也是一种现代…...

c++ STL常用工具的整理和思考

蓝桥杯后&#xff0c;我整理了这些常用的C STL工具 作为一个算法竞赛的中等生&#xff0c;以前总觉得STL“花里胡哨”&#xff0c;不如自己写数组和循环踏实。但这次蓝桥杯发现&#xff0c;合理用STL能省很多时间&#xff0c;甚至避免低级错误。下面是我总结的常用知识点和踩过…...

Go:复合数据结构

数组 定义&#xff1a;数组是固定长度、元素数据类型相同的序列 。元素通过索引访问&#xff0c;索引从 0 到数组长度减 1 。可用len函数获取元素个数 。 初始化&#xff1a;默认元素初始值为类型零值&#xff08;数字为 0 &#xff09; 。可使用数组字面量初始化&#xff0c;…...

SQL 语句基础(增删改查)

文章目录 一、SQL 基础概念1. SQL 简介2. 数据库系统的层次结构 二、SQL 语句分类1. DDL&#xff08;Data Definition Language 数据定义语言&#xff09;1.1 CREATE1.1.1 创建数据库1.1.2 创建数据表1.1.3 创建用户 1.2 ALTER1.2.1 AlTER 添加字段名1.2.2 ALTER 修改字段名1.2…...

【蓝桥杯 CA 好串的数目】题解

题目链接 考虑令 p r e [ i ] pre[i] pre[i] 表示 [ p r e [ i ] , i ] [pre[i], i] [pre[i],i] 是连续非递减子串&#xff0c;这可以类似双指针 O ( n ) O(n) O(n) 预处理&#xff1a; std::vector<int> pre(n); for (int r 1, l 0; r < n; r) {if (s[r] ! s[…...

Oracle for Linux安装和配置(11)——Linux命令

11.1. Linux命令 Linux是目前比较常用和流行的操作系统,现在很多生产环境就会用到它。随着其功能、性能、稳定性和可靠性等方面的日渐增强和完善,加之其成本上的优势,其市场占有率逐日攀升,也得到越来越多广大用户的关注和青睐。但作为一种操作系统,其安装、配置、管理和…...

Linux基础7

一、逻辑卷管理 查看所有物理卷&#xff1a;pvs 查看当前系统卷组&#xff1a;vgs 查看所有逻辑卷&#xff1a;lvs 新创建系统卷组&#xff1a;vgcreate [参数] ​ [volume name] url/sdb[1-2] ​ eg&#xff1a;vgcreate vg_Test /dev/sdb{1,2} >…...

C#打开文件及目录脚本

如果每天开始工作前都要做一些准备工作&#xff0c;比如打开文件或文件夹&#xff0c;我们可以使用代码一键完成。 using System.Diagnostics; using System.IO;namespace OpenFile {internal class Program{static void Main(string[] args){Console.WriteLine("Hello, …...

Docker 镜像 的常用命令介绍

拉取镜像 $ docker pull imageName[:tag][:tag] tag 不写时&#xff0c;拉取的 是 latest 的镜像查看镜像 查看所有本地镜像 docker images or docker images -a查看完整的镜像的数字签名 docker images --digests查看完整的镜像ID docker images --no-trunc只查看所有的…...

Python数组学习之旅:数据结构的奇妙冒险

Python数组学习之旅:数据结构的奇妙冒险 第一天:初识数组的惊喜 阳光透过窗帘缝隙洒进李明的房间,照亮了他桌上摊开的笔记本和笔记本电脑。作为一名刚刚转行的金融分析师,李明已经坚持学习Python编程一个月了。他的眼睛因为昨晚熬夜编程而微微发红,但脸上却挂着期待的微…...

Vue 3 和 Vue 2 的区别及优点

Vue.js 是一个流行的 JavaScript 框架&#xff0c;广泛用于构建用户界面和单页应用。自 Vue 3 发布以来&#xff0c;很多开发者开始探索 Vue 3 相较于 Vue 2 的新特性和优势。Vue 3 引入了许多改进&#xff0c;优化了性能、增强了功能、提升了开发体验。本文将详细介绍 Vue 2 和…...

特殊定制版,太给力了!

今天给大家分享一款超棒的免费录屏软件&#xff0c;真的是录屏的好帮手&#xff01; 这款软件功能可以录制 MP4、AVI、WMV 格式的标清、高清、原画视频&#xff0c;满足你各种需求。 云豹录屏大师 多功能录屏神器 它的界面特别简洁&#xff0c;上手超快&#xff0c;用起来很顺…...

Vue事件修饰符课堂练习

Vue事件修饰符课堂练习 题目‌&#xff1a;基于 Vue 2.0&#xff0c;使用事件修饰符 .stop、.prevent、.capture、.self 和 .once&#xff0c;为按钮绑定 click 事件&#xff0c;并展示每个修饰符的作用。 要求‌&#xff1a; 创建一个 Vue 实例&#xff0c;并绑定到一个 HT…...

Y1——ST表

知识点 ST表 只能询问&#xff0c;不能修改 ST表的预处理&#xff1a; 使用了DP的思想&#xff0c;设a是要求区间最值的数列&#xff0c;f(i,j)表示从第i个数起连续2^j个数中的最大值 状态转移方程 f [ i , j ]max( f [ i , j-1 ], f [ i 2 ^ j-1,j - 1]) 建立ST表 vo…...

Python Cookbook-5.14 给字典类型增加排名功能

任务 你需要用字典存储一些键和“分数”的映射关系。你经常需要以自然顺序(即以分数的升序)访问键和分数值&#xff0c;并能够根据那个顺序检查一个键的排名。对这个问题&#xff0c;用dict 似乎不太合适。 解决方案 我们可以使用 dict 的子类&#xff0c;根据需要增加或者重…...

第二十二: go与k8s、docker相关编写dockerfile

实战演示k8s部署go服务&#xff0c;实现滚动更新、重新创建、蓝绿部署、金丝雀发布-CSDN博客 go 编写k8s命令&#xff1a; 怎么在go语言中编写k8s命令 • Worktile社区 k8s中如何使用go 在K8s编程中如何使用Go-阿里云开发者社区 go build - o : -o&#xff1a;指定输出文件…...

Servlet、HTTP与Spring Boot Web全面解析与整合指南

目录 第一部分&#xff1a;HTTP协议与Servlet基础 1. HTTP协议核心知识 2. Servlet核心机制 第二部分&#xff1a;Spring Boot Web深度整合 1. Spring Boot Web架构 2. 创建Spring Boot Web应用 3. 控制器开发实践 4. 请求与响应处理 第三部分&#xff1a;高级特性与最…...

事件过滤器

1.简介 事件过滤器是指在程序分发到event事件之前进行的一次高级拦截。 2.使用步骤 给控件安装事件过滤器重写eventfilter事件 3.具体实现 3.1安装事件过滤器 代码&#xff1a; //给label1安装事件过滤器ui->label->installEventFilter(this); 3.2重写eventfilter…...

AI识别与雾炮联动:工地尘雾治理新途径

利用视觉分析的AI识别用于设备联动雾炮方案 背景 在建筑工地场景中&#xff0c;人工操作、机械作业以及环境因素常常导致局部出现大量尘雾。传统监管方式存在诸多弊端&#xff0c;如效率低、资源分散、监控功能单一、人力效率低等&#xff0c;难以完美适配现代工程需求。例如…...

Kubernetes nodeName Manual Scheduling practice (K8S节点名称绑定以及手工调度)

Manual Scheduling 在 Kubernetes 中&#xff0c;手动调度框架允许您将 Pod 分配到特定节点&#xff0c;而无需依赖默认调度器。这对于测试、调试或处理特定工作负载非常有用。您可以通过在 Pod 的规范中设置 nodeName 字段来实现手动调度。以下是一个示例&#xff1a; apiVe…...

Nacos注册中心

Nacos注册中心 本地环境搭建 准备挂载的文件夹 在拉取 Nacos 镜像之前&#xff0c;在 E:\docker 文件夹下&#xff0c;创建一个 /nacos 文件夹&#xff0c;等会运行容器时&#xff0c;用于将 Nacos 容器中的配置文件、持久化文件挂载出来&#xff0c;防止容器重启时数据丢失…...

除了 `task_type=“SEQ_CLS“`(序列分类),还有CAUSAL_LM,QUESTION_ANS

task_type="SEQ_CLS"是什么意思:QUESTION_ANS 我是qwen,不同模型是不一样的 SEQ_CLS, SEQ_2_SEQ_LM, CAUSAL_LM, TOKEN_CLS, QUESTION_ANS, FEATURE_EXTRACTION. task_type="SEQ_CLS" 通常用于自然语言处理(NLP)任务中,SEQ_CLS 是 Sequence Classif…...

二战蓝桥杯所感

&#x1f334; 前言 今天是2025年4月12日&#xff0c;第十六届蓝桥杯结束&#xff0c;作为二战的老手&#xff0c;心中还是颇有不甘的。一方面&#xff0c;今年的题目比去年简单很多&#xff0c;另一方面我感觉并没有把能拿的分都拿到手&#xff0c;这是我觉得最遗憾的地方。不…...

深度解析自动化工作流工具:n8n 与 Dify 的对比分析

深度解析自动化工作流工具&#xff1a;n8n 与 Dify 的对比分析 随着企业数字化转型的加速&#xff0c;自动化工具在提高工作效率、降低人工成本方面扮演着越来越重要的角色。市面上有多种自动化工作流工具可供选择&#xff0c;其中 n8n 和 Dify 是两个备受关注的开源和商业产品…...

深度剖析Python中的生成器:高效迭代的秘密武器

深度剖析Python中的生成器&#xff1a;高效迭代的秘密武器 在Python的编程世界里&#xff0c;生成器&#xff08;Generator&#xff09;是一个强大而又迷人的特性&#xff0c;它为开发者提供了一种高效处理大量数据的方式&#xff0c;尤其在涉及到迭代操作时&#xff0c;能显著…...

Mac 下载 PicGo 的踩坑指南

Mac 下载 PicGo 的踩坑指南 一、安装问题 下载地址&#xff1a;https://github.com/Molunerfinn/PicGo/releases 下载之后直接安装即可&#xff0c;此时打开会报错&#xff1a;Picgo.app 文件已损坏&#xff0c;您应该将它移到废纸篓。 这是因为 macOS 为了保护用户不受恶意…...

网页布局汇总

1. 盒模型 容器大小 内容大小 内边距(padding) 边框大小 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…...

基于 Maven 构建的 Thingsboard 3.8.1 项目结构

一、生命周期&#xff08;Lifecycle&#xff09; Maven 的生命周期定义了项目构建和部署的各个阶段&#xff0c;图中列出了标准的生命周期阶段&#xff1a; clean&#xff1a;清理项目&#xff0c;删除之前构建生成的临时文件和输出文件。validate&#xff1a;验证项目配置是否…...

MySQL 中为产品添加灵活的自定义属性(如 color/size)

方案 1&#xff1a;EAV 模型&#xff08;最灵活但较复杂&#xff09; 适合需要无限扩展自定义属性的场景 -- 产品表 CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),price DECIMAL(10,2) );-- 属性名表 CREATE TABLE attributes (id INT PRIMA…...

C++语言程序设计——02 变量与数据类型

目录 一、变量与数据类型&#xff08;一&#xff09;变量的数据类型&#xff08;二&#xff09;变量命名规则&#xff08;三&#xff09;定义变量&#xff08;四&#xff09;变量赋值&#xff08;五&#xff09;查看数据类型 二、ASCII码三、进制表示与转换&#xff08;一&…...