Qt开源控件:图像查看器工具V1.1
一、项目概述
本项目是一款基于 Qt 框架 开发的 图像查看工具,可以显示带坐标轴的图像,并实时获取图像中任意像素点的坐标和颜色信息。工具具有图像缩放、动态坐标轴绘制、鼠标交互等功能,使用起来方便直观。
二、功能亮点
1. 图像加载与显示
- 支持加载常见的图像格式,如 PNG、JPG、BMP 等。
- 图像显示自适应窗口大小,支持缩放显示,同时不会失真。
2. 动态坐标轴绘制
- 自动为图像绘制 X 轴和 Y 轴,清晰标注坐标值。
- 每 50 像素为 长刻度,显示数字;每 10 像素为 短刻度。
- 保证图像最后一位坐标(如 512)始终显示,避免与前一刻度(如 500)重叠。
3. 鼠标实时交互
- 鼠标移动到图像上时,能立即显示当前位置的像素坐标和颜色值(RGB)。
- 鼠标提示通过悬浮框直观展示,且支持将坐标信息实时发送给其他程序模块,便于集成使用。
4. 图像缩放与坐标同步
- 窗口缩放时,图像与坐标轴会同步缩放,始终保持准确对齐。
- 图像和坐标轴均居中显示,布局美观整洁。
三、使用场景
1. 科研实验
在医学图像分析、天文图像处理等领域,科研人员常需要精准查看图像某点的坐标和像素值。通过本工具,用户可快速获取这些数据,方便开展实验分析。
2. 图像处理开发
在开发图像处理算法时(如边缘检测、目标识别等),需要验证某些区域的像素值和坐标。本工具能够在算法调试中作为辅助工具,帮助开发者实时查看图像细节。
3. 工业质检
在工业生产中,利用机器视觉对产品进行检测时,工程师可能需要手动检查图像某些区域的像素值。本工具可以结合其他视觉系统,轻松获取指定位置的像素信息,快速发现问题。
四、功能详解
1. 图像加载与显示
用户可以通过工具加载 PNG、JPG 等格式的图像,工具会根据图像大小自动调整窗口,确保图像完整显示。
void ImageViewer::loadImage(const QString &imagePath) {QImage loadedImage(imagePath);if (loadedImage.isNull()) {qWarning() << "加载图像失败: " << imagePath;return;}image = loadedImage.convertToFormat(QImage::Format_RGB32);imageWidth = image.width();imageHeight = image.height();scaledImage = image; // 初始化缩放图像resize(imageWidth + 60, imageHeight + 40); // 为坐标轴预留空间update();
}
特点:
- 自动调整窗口适配图像大小。
- 支持自适应缩放,用户可以随意调整窗口大小。
2. 坐标轴绘制
工具会在图像周围动态绘制 X 轴和 Y 轴,标记每个刻度的位置。
- 每 50 像素为长刻度,并显示数字。
- 每 10 像素为短刻度,仅显示刻度线。
- 最后一位坐标始终显示(如 512),如果与前一位刻度(如 500)距离小于 30,则取消前一位的数字显示。
void ImageViewer::drawAxes(QPainter &painter, int scaledWidth, int scaledHeight, int xOffset, int yOffset) {for (int i = 0; i <= imageWidth; i += 10) {int xPosition = xOffset + (i * scaledWidth) / imageWidth;if (i % 50 == 0) { // 长刻度if (i + 50 > imageWidth && imageWidth - i < 30) continue; // 距离小于 30 的跳过painter.drawLine(xPosition, yOffset + scaledHeight, xPosition, yOffset + scaledHeight + 10);painter.drawText(xPosition - 10, yOffset + scaledHeight + 20, QString::number(i));} else { // 短刻度painter.drawLine(xPosition, yOffset + scaledHeight, xPosition, yOffset + scaledHeight + 5);}}// 最后一位刻度painter.drawLine(xOffset + scaledWidth - 1, yOffset + scaledHeight, xOffset + scaledWidth - 1, yOffset + scaledHeight + 10);painter.drawText(xOffset + scaledWidth - 20, yOffset + scaledHeight + 20, QString::number(imageWidth));
}
特点:
- 坐标刻度动态适应图像大小,缩放时保持同步。
- 清晰显示坐标值,最后一位刻度保留,防止重叠。
3. 鼠标实时交互
鼠标移动到图像上时,会弹出悬浮框显示当前位置的像素坐标及颜色值(R、G、B)。
void ImageViewer::mouseMoveEvent(QMouseEvent *event) {int x = event->pos().x() - xOffset; // 转换为图像内的相对坐标int y = event->pos().y() - yOffset;if (x >= 0 && x < scaledImage.width() && y >= 0 && y < scaledImage.height()) {QRgb pixel = scaledImage.pixel(x, y);int red = qRed(pixel), green = qGreen(pixel), blue = qBlue(pixel);emit pixelData(x, y, red, green, blue); // 发送信号QToolTip::showText(event->globalPos(), QString("坐标: (%1, %2)\nR:%3 G:%4 B:%5").arg(x).arg(y).arg(red).arg(green).arg(blue), this);}
}
特点:
- 实时反馈鼠标位置,直观查看像素数据。
- 可通过信号机制,将数据传递给其他程序模块,便于扩展。
4. 图像缩放与坐标同步
当用户调整窗口大小时,图像和坐标轴都会按比例缩放,始终保持同步。
void ImageViewer::resizeEvent(QResizeEvent *event) {if (!image.isNull()) {scaledImage = image.scaled(size().width() - 60, size().height() - 40, Qt::KeepAspectRatio);update();}
}
特点:
- 自动调整图像显示大小,适配窗口变化。
- 坐标轴动态调整位置,确保与图像对齐。
五、源码分享
ImageViewer.h
#ifndef IMAGEVIEWER_H
#define IMAGEVIEWER_H#include <QWidget>
#include <QImage>
#include <QMouseEvent>
#include <QPainter>
#include <QToolTip>#define tc(a) QString::fromLocal8Bit(a) // 用于处理中文class ImageViewer : public QWidget {Q_OBJECTpublic:explicit ImageViewer(QWidget *parent = nullptr);// 加载图像接口void loadImage(const QString &imagePath);signals:// 信号:发送鼠标位置和像素信息void pixelData(int x, int y, int red, int green, int blue);protected:// 鼠标移动事件void mouseMoveEvent(QMouseEvent *event) override;// 绘制事件void paintEvent(QPaintEvent *event) override;// 窗口缩放事件void resizeEvent(QResizeEvent *event) override;private:QImage image; // 原始图像QImage scaledImage; // 缩放后的图像int imageWidth; // 图像原始宽度int imageHeight; // 图像原始高度void drawAxes(QPainter &painter, int scaledWidth, int scaledHeight, int xOffset, int yOffset); // 绘制坐标轴
};#endif // IMAGEVIEWER_H
ImageViewer.cpp
#include "ImageViewer.h"
#include <QDebug>ImageViewer::ImageViewer(QWidget *parent): QWidget(parent), imageWidth(0), imageHeight(0) {setMouseTracking(true); // 启用鼠标追踪
}// 加载图像
void ImageViewer::loadImage(const QString &imagePath) {QImage loadedImage(imagePath);if (loadedImage.isNull()) {qWarning() << tc("加载图像失败: ") << imagePath;return;}image = loadedImage.convertToFormat(QImage::Format_RGB32); // 转为 RGB32 格式imageWidth = image.width();imageHeight = image.height();// 初始化缩放图像scaledImage = image;// 调整窗口大小resize(imageWidth + 100, imageHeight + 100); // 预留空间绘制坐标轴update(); // 触发绘制
}// 鼠标移动事件
void ImageViewer::mouseMoveEvent(QMouseEvent *event) {if (scaledImage.isNull()) return;int xOffset = (width() - scaledImage.width()) / 2;int yOffset = (height() - scaledImage.height()) / 2;int x = event->pos().x() - xOffset; // 去除图像偏移int y = event->pos().y() - yOffset;if (x >= 0 && x < scaledImage.width() && y >= 0 && y < scaledImage.height()) {QRgb pixel = scaledImage.pixel(x, y);int red = qRed(pixel);int green = qGreen(pixel);int blue = qBlue(pixel);// 发送信号emit pixelData(x, y, red, green, blue);// 显示提示信息QToolTip::showText(event->globalPos(),tc("坐标: (%1, %2)\n像素值: R%3 G%4 B%5").arg(x).arg(y).arg(red).arg(green).arg(blue),this);}
}// 窗口缩放事件
void ImageViewer::resizeEvent(QResizeEvent *event) {QWidget::resizeEvent(event);// 根据窗口大小调整图像缩放if (!image.isNull()) {scaledImage = image.scaled(size().width() - 60, size().height() - 40, Qt::KeepAspectRatio);update(); // 更新绘制}
}// 绘制事件
void ImageViewer::paintEvent(QPaintEvent *event) {QWidget::paintEvent(event);QPainter painter(this);// 绘制缩放后的图像if (!scaledImage.isNull()) {int xOffset = (width() - scaledImage.width()) / 2;int yOffset = (height() - scaledImage.height()) / 2;painter.drawImage(xOffset, yOffset, scaledImage); // 图像居中绘制// 绘制坐标轴drawAxes(painter, scaledImage.width(), scaledImage.height(), xOffset, yOffset);}
}// 绘制坐标轴
void ImageViewer::drawAxes(QPainter &painter, int scaledWidth, int scaledHeight, int xOffset, int yOffset) {// 坐标轴属性QPen axisPen(Qt::SolidLine);axisPen.setWidth(1);painter.setPen(axisPen);// 绘制 X 轴和刻度int xStart = xOffset;int yStart = yOffset + scaledHeight;painter.drawLine(xStart, yStart, xStart + scaledWidth, yStart); // X 轴线int fontWidth = 30; // 用于检查数字间距for (int i = 0; i <= imageWidth; i += 10) {int xPosition = xStart + (i * scaledWidth) / imageWidth;if (i % 50 == 0) {// 长刻度线和数字if (i + 50 > imageWidth && imageWidth - i < fontWidth) {continue; // 如果最后一位会导致重叠,跳过当前刻度}painter.drawLine(xPosition, yStart, xPosition, yStart + 10); // 长刻度线painter.drawText(xPosition - 10, yStart + 20, QString::number(i)); // 数字} else {// 短刻度线painter.drawLine(xPosition, yStart, xPosition, yStart + 5);}}// 绘制最后一位painter.drawLine(xStart + scaledWidth - 1, yStart, xStart + scaledWidth - 1, yStart + 10);painter.drawText(xStart + scaledWidth - 20, yStart + 20, QString::number(imageWidth));// 绘制 Y 轴和刻度painter.drawLine(xStart, yOffset, xStart, yOffset + scaledHeight); // Y 轴线for (int i = 0; i <= imageHeight; i += 10) {int yPosition = yOffset + (i * scaledHeight) / imageHeight;if (i % 50 == 0) {// 长刻度线和数字if (i + 50 > imageHeight && imageHeight - i < fontWidth) {continue; // 如果最后一位会导致重叠,跳过当前刻度}painter.drawLine(xStart - 10, yPosition, xStart, yPosition); // 长刻度线painter.drawText(xStart - 30, yPosition + 5, QString::number(i)); // 数字} else {// 短刻度线painter.drawLine(xStart - 5, yPosition, xStart, yPosition);}}// 绘制最后一位painter.drawLine(xStart - 10, yOffset + scaledHeight - 1, xStart, yOffset + scaledHeight - 1);painter.drawText(xStart - 30, yOffset + scaledHeight - 1 + 5, QString::number(imageHeight));
}
相关文章:
Qt开源控件:图像查看器工具V1.1
一、项目概述 本项目是一款基于 Qt 框架 开发的 图像查看工具,可以显示带坐标轴的图像,并实时获取图像中任意像素点的坐标和颜色信息。工具具有图像缩放、动态坐标轴绘制、鼠标交互等功能,使用起来方便直观。 二、功能亮点 1. 图像加载与显…...
【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解(下)
目录 详细解释更改文件内容4 运行模块(run):README.namelist5 输出模块(share):share/module_check_a_mundo.Fshare/output_wrf.F参考SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解的前两部分内容可参见-【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放A…...
【C#】新建窗体文件,Form、UserControl
从用途、功能性和架构方面进行描述。 1. 继承自 Form 的窗体(通常是窗口): 在 C# 中,Form 是用于创建应用程序的主窗口或对话框窗口的类。当您继承自 Form 时,您创建的是一个完整的窗口,可以显示内容、与…...
优化SEO策略掌握长尾关键词的力量
内容概要 在数字营销领域,SEO(搜索引擎优化)是帮助网站获得更多流量的关键。然而,随着在线竞争的加剧,单纯依赖短尾关键词已难以满足用户的搜索需求。这时,长尾关键词的引入便显得尤为重要。长尾关键词通常…...
MySQL分页查询
分页查询: 数据记录条数过多的时候,需要分页来显示。 语法: select 查询字段 from 表名 where ....等等前面学过的所有写法 limit offset(开始记录索引,是从0开始的),size(要取出的条数)&…...
执行“go mod tidy”遇到“misbehavior”错误
执行“go mod tidy”报错下错误,执行“go clean -modcache”和删除“go env GOMODCACHE”指定目录均无效: SECURITY ERROR go.sum database server misbehavior detected!old database:go.sum database tree3397826xyyhzdyAOat5li/EXx/MK1gONQf3LAGqArh…...
【机器学习】——windows下安装anaconda并在vscode上进行配置
一、安装anaconda 1.进入清华的镜像网站,下载自己电脑对应的anaconda版本。网站:https://repo.anaconda.com/archive/ 这里我下载的版本是anaconda3-2024.10-1-Windows-x86-64 2.下载完毕后开始安装anaconda 3.配置anaconda环境变量 在设置中找到编…...
第6章:布局 --[CSS零基础入门]
CSS 布局是网页设计中至关重要的一个方面,它决定了页面上元素的排列和展示方式。以下是几种常见的 CSS 布局方法和技术: 1. 浮动布局(Float Layout) 浮动布局(Float Layout)曾经是网页设计中创建多列布局…...
kubeadm安装K8s集群基础环境配置
kubeadm安装K8s集群基础环境配置 1.首先确保所有机器可以通信,然后配置主机hosts文件;2.关闭所有节点关闭防火墙、selinux、swap;3.将桥接的IPv4流量传递到 iptables;4.安装常用工具包;5.安装时间同步工具ntpdate&…...
计算机毕业设计Python医疗问答系统 医疗可视化 BERT+LSTM+CRF深度学习识别模型 机器学习 深度学习 爬虫 知识图谱 人工智能 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
学在西电录播课使用python下载,通过解析m3u8协议、多线程下载ts视频块以及ffmpeg合并
本文涵盖的内容仅供个人学习使用,如果侵犯学校权利,麻烦联系我删除。 初衷 研究生必修选逃, 期末复习怕漏过重点题目,但是看学在西电的录播回放课一卡一卡的,于是想在空余时间一个个下载下来,然后到时候就…...
攻防世界杂项刷题笔记(引导模式)13-23
引言:14包括提取文件和流量分析,22很新颖!!其他的都是常规隐写 13.base64stego 经过上一次如来十三掌的磨练,这题在看到题干“十三掌”的时候我是丝毫不慌张的。附件给了压缩包,考虑是不是伪加密…...
基于单片机的智能农田灌溉节水系统设计及应用
摘 要 : 针对传统的灌溉方法浪费水资源节水系统设计。该系统从节水角度出发,对传感器和主电路进行了设计,主要采集灌溉地的湿度与温度数据,根据测量土壤中的温度与湿度作为主要参数,对农田灌溉节水系统进行实时控制&am…...
高校毕业生离校就业数据分析管理平台的设计与实现(Java毕业设计)教务管理、就业统计
系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…...
1、SQL语言
分类方式 类别描述 部署方式 嵌入式/单机/双机/集群/分布式/云数据库 业务类型 OLTP数据库/OLAP数据库/流数据库/时序数据库 存储介质 内存数据库/磁盘数据库/SSD数据库/SCM数据库 年代 第一代是单机数据库/第二代是集群数据库/第三代是分布式数据库和云原生数据库/第…...
spark sql 环境安装,java 默认路径和 安装配置!
yum安装java 查看默认路径 update-alternatives --config java # Java 环境变量 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jreexport PATH$JAVA_HOME/bin:$PATH# Spark 环境变量 export SPARK_HOME/home/vagrant/soft/sparkexport PATH…...
【CMD、PowerShell和Bash设置代理】
【CMD、PowerShell和Bash设置代理】 1. CMD(命令提示符)临时设置代理(只对当前会话有效):查看当前代理设置:清除临时代理设置:永久设置代理(对所有新的 CMD 会话有效)&am…...
分区之间的一种度量方法-覆盖度量(Covering Metric)
分区之间的一种度量方法——覆盖度量(Covering Metric),用于量化一个分区如何被另一个分区覆盖或近似。以下是逐步详细解释: 1. 背景与符号说明 分区的概念: 分区是将一个集合(这里是 { 1 , … , n } \{…...
HarmonyOS(64) wrapBuilder 全局@Builder使用利器
WrapBuilder 全局Builder是什么什么时候使用wrapBuilderBuilder的限制参考资料 全局Builder是什么 局部Builder的定义方法如下: //定义局部Builder Builder MyBuilderFunction() {} //使用方法 this.MyBuilderFunction()全局Builder定义语法如下: //全…...
【计算机毕设】基于Spark猫眼电影票房数据分析预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
目录 【计算机毕设】基于Spark猫眼电影票房数据分析预测推荐系统(完整系统源码数据库开发笔记详细部署教程虚拟机分布式启动教程)✅ 一、项目背景 二、研究目的 三、项目意义 四、项目功能 五、项目创新点 六、开发技术介绍 七、算法介绍 八、数…...
问卷调查模板
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>问卷调查</title><style>body {font-fam…...
hadoop单机安装
步骤 1:安装 Java 安装 OpenJDK bash sudo yum install -y java-1.8.0-openjdk 验证 Java 安装 bash java -version 输出类似以下内容表示成功: arduino openjdk version “1.8.0_xxx” 步骤 2:下载 Hadoop 下载 Hadoop 安装包 前往 Hadoop 官方下载页面,获取最新稳…...
Android笔记【15】跳转页面返回信息
一、问题 学习一段代码 val intent Intent(thisSecondActivity, MainActivity::class.java) intent.putExtra("extra_data", data) startActivity(intent) 二、内容 这段代码是在 Android 应用中启动一个新的活动(Activity),具…...
MATLAB深度学习(七)——ResNet残差网络
一、ResNet网络 ResNet是深度残差网络的简称。其核心思想就是在,每两个网络层之间加入一个残差连接,缓解深层网络中的梯度消失问题 二、残差结构 在多层神经网络模型里,设想一个包含诺干层自网络,子网络的函数用H(x)来表示&#x…...
推荐几种主流数据仓库:深度剖析与对比
引言 随着数据量的不断增长,数据仓库技术在企业的数据管理和分析中扮演着越来越重要的角色。不同的数据仓库系统在性能、架构、功能和适用场景上各有特点。本文将详细介绍目前市场上几种主流的数据仓库,帮助你更好地了解各个数据仓库的特性,选…...
编译原理——词法分析器的实现
实验目的 深入理解有限自动机及其应用编辑一个词法分析器,了解计算机识别源程序字符串的过程。 实验内容和要求 实验内容:处理c语言源程序,对源程序进行编译预处理(去除注释、无用的回车换行找到包含的文件等)之后&a…...
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯 🔥 个人主页:【清流君】🔥 📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚 🌟始终保持好奇心&…...
hive分区分桶、数据倾斜总结
一、hive的基本概念 hive是一个构建在hadoop上的数据仓库工具,可以将结构化的数据文件映射为一张数据库表并提供数据查询功能 二、hive的特点 (1)数据是存储在hdfs上 (2)底层是将sql转换为MapReduce任务进行计算 …...
MySQL 函数
在 MySQL 中,函数(Function)是一种用于封装一段逻辑处理的编程结构,可以在 SQL 语句中调用并返回单个值。函数和存储过程类似,都是存储在服务器端的程序单元,但它们的应用场景和使用方式有所不同。函数通常…...
Java 并发舞台:多线程小精灵的奇幻冒险之旅
1.线程池的拒绝策略有哪些? Java中的线程池提供了几种不同的拒绝策略,当线程池无法处理新的任务时(比如因为线程池已满并且工作队列也满了),这些策略会决定如何处理新提交的任务。ThreadPoolExecutor类中定义了以下四…...
PostgreSQL 性能优化全方位指南:深度提升数据库效率
PostgreSQL 性能优化全方位指南:深度提升数据库效率 别忘了请点个赞收藏关注支持一下博主喵!!! 在现代互联网应用中,数据库性能优化是系统优化中至关重要的一环,尤其对于数据密集型和高并发的应用而言&am…...
【Go 基础】并发相关
并发相关 CAS CAS算法(Compare And Swap),是原⼦操作的⼀种,,CAS 算法是⼀种有名的⽆锁算法。⽆锁编程,即不使⽤锁的情况下实现多线程之间的变量同步。可⽤于在多线程编程中实现不被打断的数据交换操作,从…...
5G CPE终端功能及性能评测(四)
5G CPE 功能性能评测 本文选取了几款在工业应用领域应用较多的5G CPE,对其功能和性能进行了对比评测。功能方面主要对比了网络接口数量,VPN功能 支持情况。以下测试为空口测试,测试结果受环境影响较大,性能仅供参考。总体看,高通X55芯片下行最优,速率稳定。 功能 对比CPE…...
开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-集成心知天气(二)
一、前言 Qwen-Agent 是一个利用开源语言模型Qwen的工具使用、规划和记忆功能的框架。其模块化设计允许开发人员创建具有特定功能的定制代理,为各种应用程序提供了坚实的基础。同时,开发者可以利用 Qwen-Agent 的原子组件构建智能代理,以理解和响应用户查询。 本篇将介绍如何…...
JS进阶DAY3|事件(一)事件监听及事件类型
目录 一、事件监听方式(绑定) 1.1 DOM0级事件 1.2 DOM2级事件 1.3 区别 二、事件类型 2.1 鼠标事件 2.2 键盘事件 2.3 焦点事件 2.4 表单事件 2.5 加载和卸载事件 2.6 滚动事件 2.7 触摸事件(在支持触摸的设备上) 一…...
数据结构与算法之美:单链表
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《数据结构与算法之美》、《编程之路》、《题海拾贝》 欢迎点赞,关注! 目录 …...
从ctfwiki开始的pwn之旅 6.ret2reg
原理 Ret2reg,即攻击绕过地址混淆(ASLR),返回到寄存器地址 一般用于开启ASLR的ret2shellcode题型。 出现该漏洞的代码的典型特征是:程序中存在strcpy的字符串拷贝函数。 ret2reg(返回到寄存器地址攻击)是一种利用技…...
GESP202412 7级 T2
闲话 花了一个小时。 主要原因:条初始值硬控我半小时,题目看错硬控我半小时(悲)。 正文 看题目,就是求从哪个点出发所得到的所有单调下降序列的总长度最长(这个描述好奇怪,不过意思是对的)。 题目中说…...
LeetCode---426周赛
题目列表 3370. 仅含置位位的最小整数 3371. 识别数组中的最大异常值 3372. 连接两棵树后最大目标节点数目 I 3373. 连接两棵树后最大目标节点数目 II 一、仅含置位位的最小整数 题目要求我们返回二进制数位全为1,且大于 n 的最小的整数,我们可以直…...
git 拉取代码时报错 gitignore Please move or remove them before you merge.
git 拉取代码时报错, The following untracked working tree files would be overwritten by merge: .gitignore Please move or remove them before you merge. 当你在使用 Git 进行代码拉取(通常是执行 git pull 或 git merge 命令)时遇到这…...
devops-Dockerfile+Jenkinsfile方式部署Java前后端应用
文章目录 概述部署前端Vue应用一、环境准备1、Dockerfile2、.dockerignore3、nginx.conf4、Jenkinsfile 二、Jenkins部署1、新建任务2、流水线3、Build Now 构建 & 访问 Springboot后端应用1. 准备工作2. 创建项目结构3. 编写 Dockerfile后端 Dockerfile (backend/Dockerfi…...
华为云鸿蒙应用入门级开发者认证考试题库(理论题和实验题)
注意:考试链接地址:华为云鸿蒙应用入门级学习认证_华为云鸿蒙应用入门级开发者认证_华为云开发者学堂-华为云 当前认证打折之后是1元,之后原价700元,大家尽快考试!考试题库里面答案不一定全对,但是可以保证…...
Lua元表和元方法的使用
元表是一个普通的 Lua 表,包含一组元方法,这些元方法与 Lua 中的事件相关联。事件发生在 Lua 执行某些操作时,例如加法、字符串连接、比较等。元方法是普通的 Lua 函数,在特定事件发生时被调用。 元表包含了以下元方法࿱…...
自动驾驶算法——卡尔曼滤波器平滑感知车道线参数【C++代码实现】
1.算法原理 在工程实践中,由于感知识别到的车道线偶尔存在较大的跳变,导致后端控制算法计算出的控制角度也存在较大的跳变,所以我们需要对感知输入的车道线系数进行平滑处理。 已知卡尔曼滤波算法主要分为以下几大步骤: 感知将车道线以三次螺旋曲线方程 y = c 0 + c 1 x +…...
浅谈Scala语言
一、Scala语言基础 1.1 语法结构 Scala的语法是一种融合了多种编程范式的设计,它结合了函数式编程和面向对象编程的优点。这种语法结构使得Scala既具有高度的表达能力,又保持了代码的简洁性。例如,Scala支持类型推断,这意味着在…...
可视化建模以及UML期末复习篇----UML图
这是一篇相对较长的文章,如你们所见,比较详细,全长两万字。我不建议你们一次性看完,直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国! 一、UML图 总共有如下几种: 用例图(Use Ca…...
音视频入门基础:MPEG2-TS专题(13)——FFmpeg源码中,解析Section Header的实现
一、引言 在《音视频入门基础:MPEG2-TS专题(11)—— TS中的Section》中讲述了Section Header的基本概念,本文讲述FFmpeg源码中是怎样解析Section Header的。 二、parse_section_header函数的定义 FFmpeg源码中通过parse_section…...
SQL UCASE() 函数:转换字符串为大写
SQL UCASE() 函数:转换字符串为大写 概述 在SQL中,UCASE() 函数用于将字符串中的所有字符转换为大写。这是一个非常实用的函数,尤其在处理大量文本数据时,确保数据的一致性和准确性。本文将详细介绍UCASE() 函数的用法、示例以及…...
机器学习周报(12.2-12.8)
文章目录 摘要Abstract Vision Transformer1 原理2 代码 摘要 本周学习了Vision Transformer (ViT) 的基本原理及其实现,并完成了基于PyTorch的模型训练、验证和预测任务。深入理解了ViT如何将图像分割成patch作为输入序列,并结合Transformer Encoder处…...
【机器人】系统辨识之激励轨迹设计(傅里叶级数)
在机器人参数辨识中使用傅里叶级数,主要是为了生成一种激励轨迹,具有良好的数学特性,同时符合物理要求。傅里叶级数的特性使其在机器人动力学辨识的激励轨迹设计中非常常用。 1. 为什么需要激励轨迹? 激励轨迹的作用是通过驱动机…...