C# OpenCV机器视觉:OSTU算法实现背景差分的自适应分割
在一个热闹的科技公司里,阿强是一个负责图像分析的员工。他的日常工作就是从各种复杂的图像中提取出有用的信息,可这可不是一件轻松的事情哦 最近,阿强接到了一个艰巨的任务:要从一堆嘈杂的监控图像中分离出运动的物体,而且这些图像的背景复杂多变,光线条件也不稳定,就像在一堆杂乱的拼图中找出特定的几块,可把阿强给难倒啦。
“哎呀,这简直是一场噩梦啊!这些图像太调皮了,我都快被它们搞晕头转向啦 怎样才能把前景和背景清楚地分开呢?” 阿强一边看着屏幕上模糊不清的图像,一边抓耳挠腮,头发都被他弄得乱七八糟的。
不过,阿强可不是轻易放弃的人啦!在他四处查找资料的过程中,偶然发现了 OpenCvSharp 这个神奇的工具,还有里面的 OSTU 算法,这就像在茫茫大海中找到了一座明亮的灯塔。“哈哈,说不定这就是我需要的魔法呢!” 阿强兴奋地跳了起来,眼中闪烁着希望的光芒。
第一章:神秘的 “图像魔法” 开启
阿强开始钻研 OpenCvSharp 中的 OSTU 算法,感觉自己就像一个正在探索神秘宝藏的探险家。他了解到,OSTU 算法是一种自适应的图像分割算法,就像是一个超级聪明的小魔法师,能够根据图像自身的特点,自动找到一个最佳的阈值,将图像完美地分成前景和背景两部分哦。
“哇塞,这个 OSTU 算法简直就是为我量身定制的呢!” 阿强兴奋地自言自语,“有了它,我就能把那些烦人的背景和我想要的前景目标区分得一清二楚啦。”
OSTU 算法的原理其实很有趣呢 它会分析图像中像素的灰度分布,找到一个最佳的灰度值作为阈值,让前景和背景的类间方差最大。简单来说,就是把图像中的像素点分成两类,一类是属于前景的,一类是属于背景的,这个算法会找到一个最合适的分割线,让前景和背景的差异最大,就像在一群人中,找出一条神奇的分界线,让两边的人特征差异最明显。
第二章:准备踏上 “图像分割” 的冒险之旅
阿强决定先拿一些复杂的监控图像来做实验。他小心翼翼地在自己的电脑上安装 OpenCvSharp 库,这个过程就像一场刺激的冒险,各种报错和依赖问题像小怪兽一样跳出来捣乱。
“嘿,你们这些捣蛋鬼,别想拦住我哦 我一定会战胜你们的!” 阿强一边和电脑较劲,一边在网上疯狂搜索解决办法。经过千辛万苦,他终于成功安装好 OpenCvSharp 啦。
“太棒啦,我已经迈出了成功的第一步啦!” 阿强擦了擦额头上的汗水,迫不及待地打开编程软件,准备开始他的魔法代码之旅。
第三章:代码冲锋 —— 施展 OSTU 算法的魔法
阿强深吸一口气,开始认真地编写代码啦,手指在键盘上飞舞,仿佛在演奏一场精彩的魔法乐章。
using System;
using OpenCvSharp;
using System.Collections.Generic;class OtsuBackgroundSubtraction
{static void Main(){// 1. 读取图像Mat image = Cv2.ImRead("complex_monitor_image.jpg");if (image.Empty()){Console.WriteLine("哎呀,图像读取失败啦!是不是你把图像藏起来了呀 快检查一下路径或者文件哦。");return;}// 2. 将图像转换为灰度图像,因为OSTU算法在灰度图像上更有效哦Mat grayImage = new Mat();Cv2.CvtColor(image, grayImage, ColorConversionCodes.BGR2GRAY);// 3. 计算图像的直方图int[] histogram = new int[256];for (int i = 0; i < grayImage.Rows; i++){for (int j = 0; j < grayImage.Cols; j++){byte pixelValue = grayImage.At<byte>(i, j);histogram[pixelValue]++;}}// 4. 计算OSTU算法的最佳阈值int threshold = CalculateOtsuThreshold(histogram);// 5. 应用阈值进行图像分割Mat binaryImage = new Mat();Cv2.Threshold(grayImage, binaryImage, threshold, 255, ThresholdTypes.Binary);// 6. 进行形态学操作,去除噪声和填充空洞,让分割效果更好哦Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(3, 3));Cv2.MorphologyEx(binaryImage, binaryImage, MorphTypes.Open, kernel);Cv2.MorphologyEx(binaryImage, binaryImage, MorphTypes.Close, kernel);// 7. 显示原始图像和分割后的图像Cv2.ImShow("Original Image", image);Cv2.ImShow("Segmented Image", binaryImage);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}static int CalculateOtsuThreshold(int[] histogram){int totalPixels = 0;for (int i = 0; i < histogram.Length; i++){totalPixels += histogram[i];}float sum = 0;for (int i = 0; i < histogram.Length; i++){sum += i * histogram[i];}float sumB = 0;int wB = 0;int wF;float varMax = 0;int threshold = 0;for (int t = 0; t < histogram.Length; t++){wB += histogram[t];if (wB == 0) continue;wF = totalPixels - wB;if (wF == 0) break;sumB += t * histogram[t];float mB = sumB / wB;float mF = (sum - sumB) / wF;float varBetween = (float)wB * (float)wF * (mB - mF) * (mB - mF);if (varBetween > varMax){varMax = varBetween;threshold = t;}}return threshold;}
}
代码解析
- 图像读取:阿强使用Cv2.ImRead来读取图像啦,如果读取失败,程序会像个小喇叭一样提醒他检查图像路径或文件是否有问题。这就好比一场魔术表演前,要先确保道具都准备好了哦。
- 颜色转换:通过Cv2.CvtColor将图像转换为灰度图像,因为 OSTU 算法更喜欢在灰度世界里工作啦,这样可以简化问题,让算法更容易施展魔法哦。
- 计算直方图:使用一个数组histogram来统计每个灰度值的像素数量,就像在统计每种颜色的糖果有多少颗,这是 OSTU 算法计算最佳阈值的重要依据呢。
- 计算最佳阈值:CalculateOtsuThreshold方法会根据直方图来计算最佳阈值哦。这个方法会遍历每个可能的阈值,找到让前景和背景类间方差最大的那个阈值,就像在一堆数字中找到最特别的那个,让前景和背景的区别最明显。
- 图像分割:利用Cv2.Threshold函数,根据计算出的最佳阈值将图像分割成黑白两部分,白色部分就是我们想要的前景啦,黑色部分就是背景。这就像用一把神奇的剪刀,沿着找到的最佳分割线把图像剪开。
- 形态学操作:为了让分割效果更好,使用Cv2.MorphologyEx进行形态学操作。先进行开运算(MorphTypes.Open)去除噪声,就像用扫帚扫走图像中的小杂质;再进行闭运算(MorphTypes.Close)填充空洞,让前景部分更加完整,就像给前景部分补上一些小漏洞。
- 显示结果:使用Cv2.ImShow把原始图像和分割后的图像都显示出来,这样阿强就能清楚地看到自己的魔法成果啦。
第四章:实战检验 —— 魔法大获成功
阿强小心翼翼地按下运行键,心里像有只小兔子在乱跳。当看到屏幕上清晰地将前景从复杂的背景中分离出来,他兴奋得差点把键盘都敲坏啦。
“哇哈哈,我成功啦!我真的是太厉害啦!” 阿强兴奋地在办公室里手舞足蹈,同事们都被他的欢呼声吸引过来。
“阿强,你这是施了什么魔法呀?这分割效果太棒啦!” 同事们看到后纷纷竖起大拇指。
阿强自豪地向大家解释了 OSTU 算法的神奇之处,大家都对他刮目相看呢。从那以后,阿强用这个方法处理各种复杂的图像,效果都出奇地好。
阿强知道,这只是他探索图像魔法世界的开始。他还打算继续学习更多的 OpenCvSharp 魔法,解决更多复杂的图像问题,让自己成为真正的图像魔法大师呢 他的故事也在公司里流传开来,激励着其他小伙伴一起探索这个奇妙的图像处理世界。
相关文章:
C# OpenCV机器视觉:OSTU算法实现背景差分的自适应分割
在一个热闹的科技公司里,阿强是一个负责图像分析的员工。他的日常工作就是从各种复杂的图像中提取出有用的信息,可这可不是一件轻松的事情哦 最近,阿强接到了一个艰巨的任务:要从一堆嘈杂的监控图像中分离出运动的物体,…...
SIPp的参数及命令示例
以下是SIPp参数的分类表格整理,方便快速查阅和使用: SIPp 参数分类表格 分类参数描述默认值示例基本参数-sc指定XML场景文件(客户端模式)无-sc uac.xml-sd指定XML场景文件(服务器端模式)无-sd uas.xml-i本…...
【Mac排错】ls: command not found 终端命令失效的解决办法
【TroubleShooting on Mac】ls: command not found 终端命令失效的解决办法 A Solution to Solve “Command not found” of Terminal on Mac 一直在使用心爱的MacBook Pro的Terminal,并且为她定制了不同的Profile。 这样,看起来她可以在不同季节&…...
【OneAPI】通过网页预渲染让搜索引擎收录网页
API简介 网页预渲染,适用于动态网页以及单页面的SEO,支持网页缓存。 您无须更改代码即可让搜索引擎收录您的网页。只要将需要预渲染的页面转发的本接口即可。 如果您使用Nginx作为网页服务器,推荐使用以下配置: #您的网站locat…...
51单片机(国信长天)矩阵键盘的基本操作
在CT107D单片机综合训练平台上,首先将J5处的跳帽接到1~2引脚,使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中,发现有按键触发信号后(不做去抖动),待按键松开后,在数码管的第一位显示相应的数字:从左至右&…...
git命令行删除远程分支、删除远程提交日志
目录 1、从本地通过命令行删除远程git分支2、删除已 commit 并 push 的记录 1、从本地通过命令行删除远程git分支 git push origin --delete feature/feature_xxx 删除远程分支 feature/feature_xxx 2、删除已 commit 并 push 的记录 git reset --hard 7b5d01xxxxxxxxxx 恢复到…...
05-多数元素
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 方法一:哈希表法 通过哈希表来记录每个元素出现的次数,…...
一个简单的Windows TCP服务器实现
初始化 WSADATA wsaData; SOCKET serverSocket, clientSocket; struct sockaddr_in serverAddr { 0x00 }; struct sockaddr_in clientAddr { 0x00 }; int clientAddrLen sizeof(clientAddr);if (WSAStartup(MAKEWORD(2, 2), &wsaData) ! 0) {printf("WSAStartup f…...
salesforce 中 Account 转移给新 Owner 后如何仅转移 Case,而不转移 Opportunity
在 Salesforce 中,当更改 Account Owner 时,系统默认会将所有相关的 Opportunities(商机) 和 Cases(案例) 也一并转移给新的 Account Owner。如果你希望 仅转移 Case,而不转移 Opportunities&am…...
Spring Boot 中的日志配置
文章目录 Spring Boot 中日志配置的源码分析1. Spring Boot 日志框架的选择与自动配置2. 日志自动配置与默认行为3. 日志系统的核心组件:Logger 和 LoggerFactory4. 日志配置文件的解析配置日志级别配置日志输出格式和目标 5. 日志级别的控制自定义日志级别 6. 自定…...
[前端]CRX持久化
在 Chrome 扩展开发中,持久化保存数据通常使用 Chrome 的 storage API。storage API 提供了两种存储选项:local 和 sync。使用 local 存储的数据保存在本地浏览器中,只能在同一设备上访问。使用 sync 存储的数据可以在用户登录其 Google 帐户…...
绕组电感 - Ansys Maxwell 磁通链与电流
在本博客中,我将演示如何使用 Ansys Maxwell 中磁瞬态求解器的磁通链和电流结果来计算绕组电感。Ansys Maxwell 磁瞬态求解器在场计算中考虑了涡流效应,我将展示一种使用磁通链和电流结果来计算绕组电感的简单方法。 实际上,电感是非线性的…...
ComfyUI 安装教程:macOS 和 Linux 统一步骤
本教程将详细介绍如何在 macOS 和 Linux 上安装 ComfyUI。我们将从 安装 Anaconda 开始,到安装 PyTorch 和 ComfyUI,最后提供一些常见问题的解决方法。 macOS和linux安装步骤很相似 可以按照1️⃣安装anaconda2️⃣安装python3️⃣torch4️⃣comfyui Co…...
SMTP和POP3协议
SMTP和POP3协议 SMTP(简单邮件传输协议)和POP3(邮局协议版本3)是电子邮件系统中用于发送和接收邮件的核心协议。以下是它们的详细说明: 1. SMTP(Simple Mail Transfer Protocol) SMTP和POP3分…...
【C语言】#define和typedef的区别
文章目录 1.define特点 2.typedef特点 1.define #define 是预处理器指令,用来进行宏定义。它在编译之前由预处理器处理,主要用于定义常量、简单的函数宏或者代码片段的替换。 特点 文本替换:#define 主要用于文本替换,在编译前…...
2025清华:DeepSeek从入门到精通.pdf(附下载)
本文是一份关于如何深入理解和使用DeepSeek技术的全面指南,由清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的余梦珑博士后及其团队编撰。DeepSeek是一家中国科技公司,专注于通用人工智能(AGI)的研发,其开源推…...
Linux运维——用户管理
Linux用户管理 一、Linux用户管理要点二、常用命令2.1、groupadd2.2、groupdel2.3、groupmod2.4、groups2.5、useradd2.6、userdel2.7、passwd2.9、su2.10、sudo2.10.1、给普通用户授权 sudo2.10.2、 免密码授权 sudo 一、Linux用户管理要点 创建用户组 - 使用 groupadd删除用…...
Redis持久化的两种方式:RDB和AOF
redis中的数据存储在缓存中,如果没有持久化的策略,Redis一旦宕机,那么将会导致数据丢失;因此redis提供了以下两种持久化方式:RDB和AOF 一般来说,大部分公司对这两种方式都是同时开启的 一、RDB RDB策略全…...
百度高德地图坐标转换
百度地图和高德地图的侧重点不太一样。同样一个地名,在百度地图网站上搜索到的地点可能是商业网点,在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中,搜索地名,如“乱石头川”,该地名会出…...
LIMO:上海交大的工作 “少即是多” LLM 推理
25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型(LLM)中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据(通常超过 100,000 个示例),但本文展…...
Windows逆向工程入门之汇编环境搭建
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 Visual Studio逆向工程配置 基础环境搭建 Visual Studio 官方下载地址安装配置选项(后期可随时通过VS调整) 使用C的桌面开发 拓展可选选项 MASM汇编框架 配置MASM汇编项目 创建新项目 选择空…...
Git安全回退历史版本
Git安全回退历史版本 方法特点git revert保留所有中间提交历史,生成显式的反向提交,适合精确撤销特定提交。直接提交快速生成一个回退提交,无需处理多个撤销操作,适合简单回退到某个旧版本。 git revert 仅回退一个版本 git r…...
消费电子产品中的噪声对TPS54202的影响
本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、概述 在白色家电领域,降压转换器的应用非常广泛,为了实现不同的功能就需要不同的电源轨。TPS542…...
ASP.NET Core 外部向SignalR的Hub发消息
实现 Hub类中的方法只应该用于消息的发布,而不应该用来写业务逻辑,SignalR中客户端给服务器端传递消息的超时时间为30s,如果对Hub类中的方法的调用执行时间超过30s,程序就会报错。可以在MVC控制器、托管服务等外部向客户端推送消…...
Ubuntu 多版本 gcc 配置常用命令备忘
用的频率不高,总忘记具体参数 1,安装多版本 gcc 以 gcc-11 和12 为例: sudo apt-get install gcc-11 gcc-12 sudo apt-get install gcc-11 gcc-12 2,配置多版本 gcc gcc 与 g 一起配置进数据库中: sudo update-a…...
树形表查询方法
树形数据表在开发中会经常遇到,parentid字段为父结点ID,它是树型结构的标志字段。 查询方法: 1.自连接查询 如果树的层级固定可以使用表的自链接去查询,比如:我们只查询两级课程分类,可以用下边的SQL selectone.id …...
OpenStack-Train版-Allinone自动化部署脚本
一、环境准备 操作系统:CentOS 7 或以上版本 建议配置: CPU:8 核或以上 内存:16 GB 或以上 磁盘:500 GB 或以上 网络配置: 确保虚拟机已配置静态 IP 地址 确保虚拟机可以正常访问外部网络 二、自动…...
[笔记] 汇编杂记(持续更新)
文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…...
Hono.js入门指南_从零开始构建Web应用
1. 引言 项目背景与动机 随着现代Web开发的快速发展,构建高效、轻量且易于维护的Web应用变得越来越重要。Hono.js作为一个轻量级的Node.js框架,以其简洁的API和高效的性能吸引了众多开发者。本文将带你从零开始,逐步构建一个功能齐全的Web应用,帮助你快速上手Hono.js。 …...
后盾人JS -- 模块化开发
开发模块管理引擎 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…...
python-leetcode 23.回文链表
题目: 给定单链表的头节点head,判断该链表是否为回文链表,如果是,返回True,否则,返回False 输入:head[1,2,2,1] 输出:true 方法一:将值复制到数组中后用双指针法 有两种常用的列表实现&#…...
echarts 3d中国地图飞行线
一、3D中国地图 1. 一定要使用 echarts 5.0及以上的版本; 2. echarts 5.0没有内置中国地图了。点击下载 china.json; 3. 一共使用了四层地图。 (1)第一层是中国地图各省细边框和展示南海诸岛; (2)第二层是…...
Vivado IP之浮点数Floating-point
在Vivado的IP Catalog中搜索Floating-point即可找到该IP Operation Selection界面 1.绝对值,即result|A| 2.累加 3.两个浮点数的加法或者减法 4.两个浮点数进行比较 5.两个浮点数的除法 6.求指数,即e^A 7.定点数到浮点数的转化 8.浮点数转化为定…...
只需三步!5分钟本地部署deep seek——MAC环境
MAC本地部署deep seek 第一步:下载Ollama第二步:下载deepseek-r1模型第三步:安装谷歌浏览器插件 第一步:下载Ollama 打开此网址:https://ollama.com/,点击下载即可,如果网络比较慢可使用文末百度网盘链接 注:Ollama是…...
DeepSeek和ChatGPT的优劣或者区别(答案来DeepSeek和ChatGPT)
DeepSeek的答案 DeepSeek与ChatGPT作为当前两大主流AI模型,在架构设计、性能表现、应用场景等方面存在显著差异,以下从多个维度进行对比分析: 一、架构与训练效率 架构设计 DeepSeek:采用混合专家(MoE)框架…...
1 推荐系统概述
推荐系统概述 1 推荐系统的意义平台方信息生产者(物品)信息消费者(用户)推荐和搜索的区别 2 推荐系统架构系统架构算法架构 3 推荐系统技术栈算法画像层召回/粗排精排重排序 工程 1 推荐系统的意义 信息生产者(平台方…...
JavaEE架构
一.架构选型 1.VM架构 VM架构通常指的是虚拟机(Virtual Machine)的架构。虚拟机是一种软件实现的计算机系统,它模拟了物理计算机的功能,允许在单一物理硬件上运行多个操作系统实例。虚拟机架构主要包括以下几个关键组件ÿ…...
C++ labmbd表达式
文章目录 C++ Lambda 表达式详解1. Lambda 表达式的组成部分:2. Lambda 语法示例(1) 最简单的 Lambda(2) 带参数的 Lambda(3) 指定返回类型的 Lambda3. 捕获外部变量(1) 值捕获(复制)(2) 引用捕获(3) 捕获所有变量4. Lambda 在 STL 中的应用5. Lambda 作为 `std::function`6…...
当Axure遇见DeepSeek:设计工具的革命性进化
从传统的平面设计软件到如今的交互原型工具,设计工具经历了多次革命性的进化。然而,随着人工智能技术的不断发展,设计工具正面临又一次重大的变革。Axure,作为设计界知名的原型设计工具,以其强大的功能和灵活的操作性&…...
[LeetCode] day19 454. 四数相加 II
题目链接 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1: 输入&…...
FPGA开发技能(10)热电偶测温ADS1118方案
文章目录 1.热电偶原理2.ADS1118方案2.1ADS介绍2.2原理设计2.3实物连接图2.4测温原理 3.误差校准3.1查表法3.2冷端补偿法 4.SPI操作时序5.传送门 1.热电偶原理 两个不同材料的金属线一端在同一结点连接,另一端放在被测温点,则二者会产生一定的压差&…...
CNN-day5-经典神经网络LeNets5
经典神经网络-LeNets5 1998年Yann LeCun等提出的第一个用于手写数字识别问题并产生实际商业(邮政行业)价值的卷积神经网络 参考:论文笔记:Gradient-Based Learning Applied to Document Recognition-CSDN博客 1 网络模型结构 …...
【DeepSeek学Cuda】NVidia GPU指令集架构-Load和Cache
https://zhuanlan.zhihu.com/p/692445145 当warp内的线程访问同一个constant位置时,其是确定的latency的(和访问寄存器一样) latency 什么意思 当 warp 内的线程访问同一个 constant 位置时,其是确定的 latency 的(和…...
[免费]Springboot+Vue(带推荐算法)网上购物商城系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringbootVue(带推荐算法)网上购物商城系统,分享下哈。 项目视频演示 【免费】SpringbootVue(带推荐算法)网上购物商城系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 根据需求分析文档确定的…...
车载测试工具 --- CANoe VH6501 进行Not Acknowledge (NAck) 测试
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...
JVM调优参数分类
JVM调优参数分类 一、内存管理参数(堆/非堆) 1. 堆内存设置 参数格式功能说明典型场景值记忆口诀-Xms初始堆大小-Xms4gXms起始大小-Xmx最大堆大小-Xmx8gXmx最大上限-Xmn年轻代大小-Xmn2gXmn年轻代-XX:NewRatio老年代与年轻代比例-XX:NewRatio2比例老/新…...
高阶C语言|枚举与联合
💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C语言感兴…...
通过魔搭社区本地下载大语言模型及API接口调用模型实现
一、背景 在之前的博文:CSDN中,我们已经详细介绍了如何安装Python环境和一些必要的库和访问Transformers库的大模型。然而,在实际操作过程中,我们发现模型的下载或者调用需要访问Hugging Face上的Transformers库,这是一个国外的网…...
2022java面试总结,1000道(集合+JVM+并发编程+Spring+Mybatis)的Java高频面试题
1、面试题模块汇总 面试题包括以下十九个模块: Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示…...
【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA
本篇,将使用CubeMXKeil,创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果,如下图: 一、简述 上两篇,已循序渐进讲解了SD、…...