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

嵌入式人工智能应用-第三章 opencv操作 5 二值化、图像缩放

嵌入式人工智能应用

嵌入式人工智能应用-第三章 opencv操作 5 二值化

  • 嵌入式人工智能应用
  • 1 二值化
    • 1.1 概念介绍
    • 1.2 函数介绍
    • 1.2 基本应用
    • 1.3 参考案例
  • 2 图像缩放
    • 2.1 基本概念
    • 2.2 函数介绍
    • 2.3 基本参考代码
    • 2.4 pyrUp 和 pyrDown 函数
    • 2.5 函数介绍
    • 2.6 参考代码
    • 2.7 总结

1 二值化

1.1 概念介绍

二值化是图像分割的一种重要方法,图像的二值化就是将图像的表示方法缩减成两种状态,要么是 0,要么是 1,对于肉眼看到的就是非黑即白。一幅彩色图像,比如是 RGB888 的,则有 R/G/B 三个通道,每个通道的位深都是 8,所以 R、G、B 都有 0 到 255 的变化空间,表现出来的就是 256 种颜色。三个通道柔和在一起表示一个像素点,就有 224 种颜色。灰度图像是将 RGB 三个通道缩减到一个通道,于是他的变化空间就是 0 到 255,也就是 256 种颜色。二值图像就是将变化范围缩减到 0 到 1,也就是 2 种颜色。

图像处理中非常重要的一步,尤其在图像分析、物体识别、边缘检测中经常用到。

1.2 函数介绍

cv::threshold 是 OpenCV 中用于图像二值化的一个非常重要的函数。它可以将图像中的像素值根据给定的阈值进行分类,并将结果映射为两个值(通常是黑或白)。这个函数不仅支持简单的阈值处理,还支持一些先进的二值化算法。

cv::threshold(const cv::Mat& src,        // 输入图像cv::Mat& dst,              // 输出图像double thresh,             // 阈值(如果是 Otsu 等方法,这个值会被自动计算)double maxValue,           // 设定的最大值,通常是255int thresholdType          // 阈值类型(例如 THRESH_BINARY, THRESH_OTSU 等)
);

参数解释:
src:输入图像,必须是灰度图(CV_8UC1)。

dst:输出图像,和输入图像大小相同,存储二值化后的结果。

thresh:阈值,决定哪些像素变成白色,哪些变成黑色。

maxValue:最大值,一般设为 255,表示白色。

thresholdType:阈值类型(有多种选择,下面会详细介绍)

阈值类型	说明
THRESH_BINARY	如果像素值大于阈值,输出最大值(如 255),否则输出 0(黑色)。
THRESH_BINARY_INV	与 THRESH_BINARY 相反,像素值大于阈值的变为 0(黑),小于阈值的变为最大值(白)。
THRESH_TRUNC	如果像素值大于阈值,则将该像素值设置为阈值;否则不改变。
THRESH_TOZERO	如果像素值大于阈值,保留原值;否则将其设为 0(黑色)。
THRESH_TOZERO_INV	与 THRESH_TOZERO 相反,像素值小于阈值时保留原值,其他设置为 0(黑)。
THRESH_OTSU	自适应阈值选择方法。该方法通过最大化类间方差来选择最佳的阈值(无需手动设置阈值)。
THRESH_TRIANGLE	基于最大类间方差的阈值选择方法,类似 Otsu,但一般使用自适应的三角形方法。

1.2 基本应用

cv::Mat grayImage = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat binaryImage;
cv::threshold(grayImage, binaryImage, 128, 255, cv::THRESH_BINARY);
// Otsu 二值化
cv::Mat otsuImage;
cv::threshold(grayImage, otsuImage, 0, maxValue, cv::THRESH_BINARY | cv::THRESH_OTSU);

1.3 参考案例

代码将一幅灰度图像进行二值化,然后显示出来。使用 OpenCV 提供的 Mat 定义两个变量,用于存储原始图像和二值化后的图像,OpenCV 提供的 imread 方法可以直接读取灰度图像,第二个参数 flag 默认是1,设置成 0 即可读取灰度图像。使用 OpenCV 提供的 threshold 方法进行二值化处理,处理结果存放在第二个参数 result 中。

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
using namespace std;
int main(int argc,char* argv[])
{Mat img;Mat result;img = imread("cyq.jpg",0);namedWindow("Image");imshow("Image", img);threshold(img, result, 100, 255, CV_THRESH_BINARY);imshow("output", result);waitKey(0);return 0;
}

在这里插入图片描述

2 图像缩放

2.1 基本概念

在计算机图像处理和计算机图形学中,图像缩放(image scaling)是指对数字图像的大小进行调整的过程。图像缩放是一种非平凡的过程,需要在处理效率以及结果的平滑度(smoothness)和清晰度(sharpness)上做一个权衡。当一个图像的大小增加之后,组成图像的像素的可见度将会变得更高,从而使得图像表现得粗糙。相反地,缩小一个图像将会增强它的平滑度和清晰度,让图像看起来更加细腻。OpenCV 提供的 Resize() 函数非常方便而且效率也非常高。

图像缩放是计算机视觉中一个非常常见的操作。它涉及到改变图像的尺寸,可以用来适应不同的显示设备、节省存储空间,或者为了某些处理操作(比如特征提取、物体检测等。

2.2 函数介绍

cv::resize(const cv::Mat& src,          // 输入图像cv::Mat& dst,                // 输出图像cv::Size dsize,              // 输出图像的尺寸,指定宽度和高度double fx = 0,               // 水平缩放因子(默认0,表示不改变)double fy = 0,               // 垂直缩放因子(默认0,表示不改变)int interpolation = cv::INTER_LINEAR // 插值方法,默认线性插值
);

src:输入图像(可以是彩色图像或灰度图像)。
dst:输出图像,存储缩放后的结果。
dsize:目标图像的大小(cv::Size(width, height)),你可以指定宽度和高度。
fx、fy:缩放因子。如果你不指定 dsize,可以通过这两个因子来控制宽度和高度的缩放比例。例如,fx = 2 表示宽度放大2倍,fy = 0.5 表示高度缩小为原来的一半。
interpolation:插值方法,用于在缩放过程中生成新的像素值。OpenCV 支持多种插值方法,默认是 线性插值(cv::INTER_LINEAR)。

cv::INTER_NEAREST:最近邻插值。最快,但质量较差,可能导致“锯齿状”边缘。cv::INTER_LINEAR:双线性插值。常用的默认方法,平衡速度和质量,适用于大多数场景。cv::INTER_CUBIC:三次插值。效果更好,但速度稍慢,适合对质量要求较高的场景。cv::INTER_LANCZOS4:Lanczos插值。最优的质量,但计算量最大,适用于高质量要求的缩放。

2.3 基本参考代码

#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 读取图像cv::Mat image = cv::imread("image.jpg");if (image.empty()) {std::cerr << "无法读取图像!" << std::endl;return -1;}// 创建一个目标大小cv::Size targetSize(800, 600);  // 将图像缩放到 800x600// 输出图像cv::Mat resizedImage;// 使用 cv::resize 进行图像缩放cv::resize(image, resizedImage, targetSize, 0, 0, cv::INTER_LINEAR);// 显示原图和缩放后的图像cv::imshow("原图", image);cv::imshow("缩放后的图像", resizedImage);cv::waitKey(0);  // 等待用户按键return 0;
}
cv::Mat resizedImage;
cv::resize(image, resizedImage, cv::Size(), 0.5, 0.5, cv::INTER_LINEAR);  // 缩小到原来的一半

2.4 pyrUp 和 pyrDown 函数

pyrUp 和 pyrDown 是 OpenCV 中常用的图像金字塔(Pyramid)操作函数,用于分别对图像进行上采样和下采样。这两个函数是高效实现金字塔图像缩放的工具,通常用于多尺度图像处理,如图像金字塔、图像金字塔加速的图像匹配和特征提取等。

图像金字塔是一种多层次的图像表示方法,它将图像通过不同的分辨率进行降采样和上采样,形成一个金字塔结构。每一层都是前一层的缩小或放大的版本。

金字塔下采样(PyrDown):逐渐降低图像的分辨率,形成越来越小的图像。
金字塔上采样(PyrUp):逐渐提高图像的分辨率,形成越来越大的图像。

2.5 函数介绍

  1. cv::pyrDown 用于图像的 下采样(缩小),它通过 高斯滤波 平滑图像,然后对其进行 降采样。
cv::pyrDown(const cv::Mat& src, cv::Mat& dst, cv::Size dstsize = cv::Size());

src:输入图像。
dst:输出图像(下采样后的图像)。
dstsize:输出图像的目标尺寸。如果不指定,OpenCV 会自动计算。
默认情况下,目标图像的尺寸是源图像尺寸的一半(宽和高分别缩小为原来的一半)。

  1. cv::pyrUp 用于图像的 上采样(放大),它首先会通过 插值 放大图像,然后进行 高斯平滑 来减少模糊。
cv::pyrUp(const cv::Mat& src, cv::Mat& dst, cv::Size dstsize = cv::Size());

src:输入图像。
dst:输出图像(上采样后的图像)。
dstsize:输出图像的目标尺寸。如果不指定,OpenCV 会自动计算。
默认情况下,目标图像的尺寸是源图像尺寸的两倍(宽和高分别增大为原来的两倍)。
功能:
将图像的大小放大一倍,并通过高斯滤波对图像进行平滑,防止在放大过程中产生锯齿和过度模糊。

2.6 参考代码

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
using namespace cv;
Mat src, dst, tmp;
const char* window_name = "Pyramids Demo";
int main( int argc, char** argv )
{printf( "\n Zoom In-Out demo \n " );printf( "------------------ \n" );printf( " * [u] -> Zoom in \n" );printf( " * [d] -> Zoom out \n" );printf( " * [ESC] -> Close program \n \n" );src = imread( "cyq.jpg" );if( !src.data ){printf(" No data! -- Exiting the program \n");return -1;}tmp = src;dst = tmp;namedWindow( window_name, CV_WINDOW_AUTOSIZE );imshow( window_name, dst );while( true ){int c;c = waitKey(10);if( (char)c == 27 )break;if( (char)c == 'u' ){ pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 ) );printf( "** Zoom In: Image x 2 \n" );}else if( (char)c == 'd' ) {yrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 ) );printf( "** Zoom Out: Image / 2\n");}imshow( window_name, dst );tmp = dst;}return 0;
}

在这里插入图片描述

2.7 总结

在这里插入图片描述

🔧 resize 是你万能的图像尺寸调节器;
📉 pyrDown 是模糊又平滑的降采样器;
📈 pyrUp 是温柔的图像放大器(带模糊,不够清晰)

相关文章:

嵌入式人工智能应用-第三章 opencv操作 5 二值化、图像缩放

嵌入式人工智能应用 嵌入式人工智能应用-第三章 opencv操作 5 二值化 嵌入式人工智能应用1 二值化1.1 概念介绍1.2 函数介绍1.2 基本应用1.3 参考案例 2 图像缩放2.1 基本概念2.2 函数介绍2.3 基本参考代码2.4 pyrUp 和 pyrDown 函数2.5 函数介绍2.6 参考代码2.7 总结 1 二值化…...

[OS_7] 访问操作系统对象 | offset | FHS | Handle

实验代码可以看去年暑假的这篇文章&#xff1a;【Linux】进程间通信&#xff1a;详解 VSCode使用 | 匿名管道 我们已经知道&#xff0c;进程从 execve 后的初始状态开始&#xff0c;可以通过 mmap 改变自己的地址空间&#xff0c;通过 fork 创建新的进程&#xff0c;再通过 exe…...

【Vulkan 入门系列】创建帧缓冲、命令池、命令缓存,和获取图片(六)

这一节主要介绍创建帧缓冲&#xff08;Framebuffer&#xff09;&#xff0c;创建命令池&#xff0c;创建命令缓存&#xff0c;和从文件加载 PNG 图像数据&#xff0c;解码为 RGBA 格式&#xff0c;并将像素数据暂存到 Vulkan 的 暂存缓冲区中。 一、创建帧缓冲 createFramebu…...

Linux 进程控制(自用)

非阻塞调用waitpid 这样父进程就不会阻塞&#xff0c;此时循环使用我们可以让父进程执行其他任务而不是阻塞等待 进程程序替换 进程PCB加载到内存中的代码和数据 替换就是完全替换当前进程的代码段、数据段、堆和栈&#xff0c;保存当前的PCB 代码指的是二进制代码不是源码&a…...

FreeSWITCH 简单图形化界面41 - 批量SIP视频呼叫测试

FreeSWITCH 简单图形化界面41 - 批量视频测试 0、界面预览00、安装测试工具1、注册分机2、设置接听选项2.1 上传媒体文件2.2 设置接听设置 3、呼叫测试 0、界面预览 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密码&#xff1a;admin FreeSWITCH界面安…...

通过爬虫方式实现头条号发布视频(2025年4月)

1、将真实的cookie贴到代码目录中toutiaohao_cookie.txt文件里,修改python代码里的user_agent和video_path, cover_path等变量的值,最后运行python脚本即可; 2、运行之前根据import提示安装一些常见依赖,比如requests等; 3、2025年4月份最新版; 代码如下: import js…...

《AI大模型应知应会100篇》第28篇:大模型在文本创作中的应用技巧

第28篇&#xff1a;大模型在文本创作中的应用技巧 &#x1f9e0; 摘要 在内容为王的时代&#xff0c;AI大模型正在重塑文本创作的每一个环节。从创意构思到风格润色&#xff0c;从论文报告到小说脚本&#xff0c;AI不仅是创作者的助手&#xff0c;更是灵感的激发器。本文将带你…...

字节跳动发布UI-TARS-1.5,入门AI就来近屿智能

近日&#xff0c;字节跳动在 Hugging Face 平台正式开源了其最新多模态代理模型——UI-TARS-1.5。作为 UI-TARS 系列的革新之作&#xff0c;该模型以视觉语言模型为基础&#xff0c;突破性实现跨平台 GUI 自动化交互&#xff0c;为自动化与智能交互领域注入了强劲动能。无论是开…...

大数据学习栈记——MapReduce技术

本文介绍hadoop中的MapReduce技术的应用&#xff0c;使用java API。操作系统&#xff1a;Ubuntu24.04。 MapReduce概述 MapReduce概念 MapReduce是一个分布式运算程序的编程框架&#xff0c;核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序…...

GO语言入门:常用数学函数2

14.6 大型数值 math/big 包中公开了一些实用 API&#xff0c;用于表示大型整数值和浮点数值。当基础类型无法容纳要使用的数值时&#xff0c;应改用 big 包中提供的新类型。例如 Int、Float 等。 14.6.1 大型整数值之间的运算 若希望让下面两个整数值完成加、减法运算&#…...

Django 使用教程

Django 使用教程 Django 是一个高级的 Python Web 框架&#xff0c;采用了 MTV&#xff08;Model-Template-View&#xff09;设计模式&#xff0c;旨在帮助开发者快速构建高效、可维护的 Web 应用。它有着非常丰富的功能&#xff0c;包括 ORM、用户认证、表单处理、管理后台等…...

deepseek + kimi制作PPT

目录 一、kimi简介二、deepseek生成内容三、生成PPT四、编辑PPT 一、kimi简介 kimi是一款只能ppt生成器&#xff0c;擅长将文本内容生成PPT。 在这里&#xff0c;​​DeepSeek 负责内容生成与逻辑梳理​​&#xff0c;​​Kimi 优化表达与提供设计建议​​。 二、deepseek生…...

C++学习:六个月从基础到就业——内存管理:RAII原则

C学习&#xff1a;六个月从基础到就业——内存管理&#xff1a;RAII原则 本文是我C学习之旅系列的第十九篇技术文章&#xff0c;也是第二阶段"C进阶特性"的第四篇&#xff0c;主要介绍C中的RAII原则及其在资源管理中的应用。查看完整系列目录了解更多内容。 引言 在…...

量子计算与经典计算融合:开启计算新时代

一、引言 随着科技的飞速发展&#xff0c;计算技术正迎来一场前所未有的变革。量子计算作为前沿技术&#xff0c;以其强大的并行计算能力和对复杂问题的高效处理能力&#xff0c;吸引了全球科技界的关注。然而&#xff0c;量子计算并非要完全取代经典计算&#xff0c;而是与经典…...

RV1126网络环境TFTPNFS搭建(二)

二、RV1126 开发板TFTP环境搭建 2.1、Ubuntu下安装和配置 xinetd 执行以下指令&#xff0c;安装 xinetd sudo apt-get install xinetd 执行以下指令创建一个 xinetd.conf 文件 sudo vi /etc/xinetd.conf 修改 xinetd.conf 文件内容如下&#xff1a; # Simple configurat…...

计算机视觉7——齐次坐标与相机内外参

一、透视投影 透视投影&#xff08;Perspective Projection&#xff09;是计算机视觉和图形学中描述三维物体在二维平面成像的基础模型&#xff0c;其核心思想是模拟人类视觉系统的成像原理——中心投影。具体而言&#xff0c;三维空间中的点通过一个固定的投影中心&#xff0…...

学习笔记—C++—string(一)

目录 string 为什么学习string的类 string类的常用接口 string类对象的常见构造 string类对象的访问及遍历操作 operator[] 迭代器 范围for auto 迭代器&#xff08;二&#xff09; string类对象的容量操作 size,length,max_size,capacity,clear基本用法 reserve 提…...

Linux命令-Shell编程

Shell是一个命令行解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核。 写一个hello.sh脚本&#xff1a; 1.mkdir scripts 2.cd scripts 3.touch hello.sh 4.vim hello.sh #!/bin/bash echo "hello,world" 5.bash hello.sh&#xff08…...

基于Django的AI客服租车分析系统

基于Django的AI客服租车分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】AI智能客服与用户交互指导手册 【技术栈】 ①&#xff1a;系统环境&#xff1a;Python 3.8&#xff0c;Django 4.2框架 ②&#xff1a;开发环境&a…...

计算机组成与体系结构:计算机结构的分类(classifications of computer architecture)

目录 Von Neumann Architecture&#xff08;冯诺依曼结构&#xff09; Harvard Architecture&#xff08;哈佛结构&#xff09; Modified Harvard Architecture&#xff08;改进哈佛结构&#xff09; 三种结构对比总结表 &#x1f4a1; 从“内存访问结构”角度分类&#x…...

在阿里云和树莓派上编写一个守护进程程序

目录 一、阿里云邮件守护进程 1. 安装必要库 2. 创建邮件发送脚本 mail_daemon.py 3. 设置后台运行 二、树莓派串口守护进程 1. 启用树莓派串口 2. 安装依赖库 3. 创建串口输出脚本 serial_daemon.py 4. 设置开机自启 5. 使用串口助手接收 一、阿里云邮件守护进程 1.…...

Redis 的几种数据类型

Redis 提供了多种数据类型&#xff0c;以支持不同的应用场景。每种数据类型都有其特定的操作方式&#xff0c;并且在内部实现上也有所优化&#xff0c;能够满足不同的业务需求。以下是 Redis 支持的几种常见数据类型&#xff1a; 1. 字符串&#xff08;String&#xff09; 描…...

Spring之我见 - Spring Boot Starter 自动装配原理

欢迎光临小站&#xff1a;致橡树 Spring Boot Starter 的核心设计理念是 约定优于配置&#xff0c;其核心实现基于 自动配置&#xff08;Auto-Configuration&#xff09; 和 条件化注册&#xff08;Conditional Registration&#xff09;。以下是其生效原理&#xff1a; 约定…...

LeRobot 项目部署运行逻辑(二)—— Mobile Aloha 真机部署

LeRobot 在开源项目中详细说明了部署流程&#xff0c;所以首先看一下开源的内容&#xff0c;然后再逐步拆解 首先&#xff0c;LeRobot 开源的硬件是配全部在 examples 文件夹中 包括了 Stretch 3、Aloha and Aloha 2 stationary、SO-100、LeKiwi、Moss v1 等机器人 恰好实验…...

大模型面经 | 介绍一下CLIP和BLIP

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

Java发生OOM是否必然导致JVM退出

Java发生OOM是否必然导致JVM退出&#xff1f; 核心结论 不一定。OOM是否导致JVM退出取决于以下因素&#xff1a; OOM发生的区域JVM启动参数配置是否捕获了OOM异常 详细分析 1. 不同内存区域的OOM影响 内存区域错误类型默认是否导致JVM退出可恢复性Java堆OutOfMemoryError…...

Docker Compose 外部网络(`external: true`)与内部网络的区别

Docker Compose 外部网络(external: true)与内部网络的区别 在 Docker Compose 中&#xff0c;external: true 声明的外部网络与普通(内部)网络有重要区别&#xff0c;以下是它们的详细对比&#xff1a; 1. 定义与创建方式 特性外部网络 (external: true)内部网络 (默认)创建…...

【Android】Wallpaper学习

从wallpaper的设置来了解相关内容&#xff1a; 一&#xff0c;静态壁纸 静态壁纸设置的原理是在WallpaperManagerService里监听/data/system/users/0/wallpaper_orig相关文件的变化来触发设置&#xff0c;通过相应的组件程序去进行绘制&#xff0c; 相应的组件如&#xff1a…...

Java基础-第一章、基本数据类型

运算符&#xff1a; 1.算术运算符&#xff1a;加减乘除%等 2.逻辑运算符&#xff1a;与或非等 3.关系运算符&#xff1a;大于、小于... 4.赋值运算符&#xff1a; 这里牵扯运算符的运算先后顺序了。 赋值运算的返回值&#xff1a;就是赋值的变量本身...

《Operating System Concepts》阅读笔记:p748-p748

《Operating System Concepts》学习第 64 天&#xff0c;p748-p748 总结&#xff0c;总计 1 页。 一、技术总结 1.Transmission Control Protocol(TCP) 重点是要自己能画出其过程&#xff0c;这里就不赘述了。 二、英语总结(生词&#xff1a;3) transfer, transport, tran…...

Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏

Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏 Project 08 - Digital Hourglass 数字沙漏程序功能概述功能:硬件要求:输出:代码结构全局变量`setup()` 函数`loop()` 函数计时和点亮LED:读取倾斜开关状态:重置LED和计时器:运行过程注意事项Project 08 - …...

报告总结笔记 | Jeff Dean ETH AI趋势 笔记:AI 的重要趋势:我们是如何走到今天的,我们现在能做什么,以及我们如何塑造 AI 的未来?

报告总结笔记 | Jeff Dean ETH AI趋势 笔记&#xff1a;AI 的重要趋势&#xff1a;我们是如何走到今天的&#xff0c;我们现在能做什么&#xff0c;以及我们如何塑造 AI 的未来&#xff1f; 2025年 4 月 14 日&#xff0c;Google Research 及 Google DeepMind 的首席科学家、A…...

RocketMQ实现基于可靠消息的最终一致性

RocketMQ实现基于可靠消息的最终一致性 文章目录 RocketMQ实现基于可靠消息的最终一致性一、RocketMQ应用场景**应用解耦****流量削峰****数据分发** 二、RocketMQ 基础概念1. 核心组件2. 消费模式3. 消息可靠性 三、消息类型按发送方式分同步发送异步发送单向发送 按使用功能特…...

【题解-Acwing】790. 数的三次方根

题目:790. 数的三次方根 题目描述 给定一个浮点数 n,求它的三次方根。 输入 共一行,包含一个浮点数 n 。 输出 共一行,包含一个浮点数,表示问题的解。 注意,结果保留 6 位小数。 数据范围 −10000 ≤ n ≤ 10000 时空限制 1s / 64MB 输入样例 1000.00输出样…...

一键升级OpenSSH/OpenSSL修复安全漏洞

在服务器安全运维过程中&#xff0c;我们经常面临这样的问题&#xff1a;收到高危漏洞通报&#xff08;如最近的OpenSSH多个CVE漏洞&#xff09;&#xff0c;但Ubuntu系统无法通过apt直接升级到修复版本。这种情况下&#xff0c;传统方法需要手动编译源码&#xff0c;处理依赖关…...

Pycharm 如何删除某个 Python Interpreter

在PyCharm中&#xff0c;点击右下角的“Interpreter Settings”按钮&#xff0c;或者通过菜单栏选择“File” > “Settings”&#xff08;macOS用户选择“PyCharm” > “Preferences”&#xff09;。在设置窗口中&#xff0c;导航到“Project: [Your Project Name]” >…...

【C++】深入浅出之多态

目录 多态的概念多态的定义和实现多态的构造条件虚函数虚函数的重写虚函数重写的两个例外协变析构函数作为虚函数重写 C11的override和final重载、重写(覆盖)、隐藏(重定义)的对比相关面试题⭐ 抽象类概念接口继承和实现继承 多态的原理虚函数表多态的原理动态绑定和静态绑定 e…...

精益数据分析(9/126):如何筛选创业路上的关键数据指标

精益数据分析&#xff08;9/126&#xff09;&#xff1a;如何筛选创业路上的关键数据指标 大家好&#xff01;在创业的漫漫长路中&#xff0c;数据就像一盏明灯&#xff0c;指引着我们前行的方向。但要让这盏灯发挥作用&#xff0c;关键在于找到那些真正有价值的数据指标。今天…...

【Python爬虫详解】第二篇:HTML结构的基本分析

在上一篇文章中&#xff0c;我们介绍了网络爬虫的基本概念、发展历程和工作原理。要进行有效的网页内容爬取&#xff0c;首先需要理解我们要爬取的对象 —— 网页的基本结构和语法。网页本质上是由HTML代码构成的&#xff0c;爬虫程序需要从HTML中提取我们需要的信息。因此&…...

【C++】 —— 笔试刷题day_21

一、爱丽丝的人偶 题目解析 现在存在n个玩偶&#xff0c;每个玩偶的身高是1、2、3......n&#xff1b; 现在我们要对这些玩偶进行排序&#xff08;如果x人偶&#xff0c;它左右两边的玩偶一个比x高、一个比x矮&#xff0c;那这个玩偶就会爆炸&#xff09;。 我们不想要任何一个…...

云点数据读写

一、常见点云数据格式 LAS/LAZ格式 LAS是点云数据的行业标准格式 LAZ是LAS的压缩版本 支持地理参考信息、颜色、强度等属性 PCD格式(Point Cloud Data) PCL(Point Cloud Library)开发的格式 支持ASCII和二进制存储 包含头部信息和数据部分 PLY格式(Polygon File Format…...

Matlab 汽车行驶速度PID控制系统仿真

1、内容简介 Matlab 213-汽车行驶速度PID控制系统仿真 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

STM32嵌入式

一、创建工程项目 1、进入软件首页 2、新建项目,【file】->【new project】 3、选择需要的芯片 4、系统内核部分设置 ① 选择晶振&#xff08;使用外部的高速晶振&#xff09; ② 选择debug形式&#xff08;SW类型&#xff09; 5、时钟设置 6、选择自己需要的引脚设置&a…...

机器学习(神经网络基础篇)——个人理解篇6(概念+代码)

1 在声明一个类中&#xff0c;构建一个属于类的函数&#xff0c;前面为什要加上“self”&#xff1f; 就像下面这一串代码&#xff1a; class TwoLayerNet:def __init__(self, input_size, hidden_size, output_size,weight_init_std0.01):# 初始化权重self.params {}self.p…...

Java学习手册:Filter 和 Listener

在 JavaWeb 开发中&#xff0c;Filter&#xff08;过滤器&#xff09;和 Listener&#xff08;监听器&#xff09;是两个重要的技术组件&#xff0c;它们在处理客户端请求、管理应用状态和资源以及实现全局逻辑控制等方面发挥着关键作用。 一、Filter&#xff08;过滤器&#…...

深度学习总结(25)

抽样偏倚问题 非代表性数据有一个特别隐蔽又特别常见的例子&#xff0c;那就是抽样偏倚&#xff08;sampling bias&#xff09;​。如果你的数据收集过程与你尝试预测的目标之间存在相互影响&#xff0c;就会出现抽样偏倚&#xff0c;从而导致有偏差的结果。 理解数据 将数据…...

探索 Model Context Protocol (MCP):它如何影响 AI 的表现?

Anthropic 公司 Anthropic 是一家技术实力雄厚的公司&#xff0c;也是大模型领域的重要参与者之一。其开发的 **Claude 模型** 是全球首个以编程能力见长并广受欢迎的大语言模型。这款模型凭借卓越的代码生成和理解能力&#xff0c;迅速成为许多开发者工具的核心组件。例如&am…...

Three.js + React 实战系列-3D 个人主页 :完成 Navbar 导航栏组件

在上一节中&#xff0c;我们搭建了项目的基础结构&#xff0c;搭建好了项目框架。 本节我们将继续完善页面结构&#xff0c;完成第一个视觉组件 —— Navbar 导航栏 ✅ 前置准备&#xff1a; ✅下载静态资源在根目录下 (src 同级)谷歌云盘地址 &#x1f3a5; 02 完成 Navba…...

游戏引擎学习第238天:让 OpenGL 使用我们的屏幕坐标

回顾并为今天的内容做准备 我们已经完成了硬件显示的实现&#xff0c;现在通过GPU来显示游戏。原本以为这会花费很长时间&#xff0c;但结果实际所需的时间并不多。因此&#xff0c;我们现在有了进展&#xff0c;但接下来应该做什么还不确定。虽然有很多事情可以做&#xff0c…...

go+mysql+cocos实现游戏搭建

盲目的学了一段时间了&#xff0c;刚开始从Box2d开始学习&#xff0c;明白了很多&#xff0c;Box2d是物理模型的基础&#xff0c;是我们在游戏中模拟现实的很重要的一个开源工具。后来在朋友的建议下学习了cocos&#xff0c;也是小程序开发的利器&#xff0c;而golang是一款高效…...