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

从代码学习深度学习 - 语义分割和数据集 PyTorch版

文章目录

  • 前言
  • 什么是语义分割?
  • 图像分割和实例分割
  • Pascal VOC2012 语义分割数据集
    • Pascal VOC2012 语义分割数据集介绍
      • 基本信息
      • 语义分割部分特点
      • 数据格式
      • 评价指标
      • 应用价值
      • 数据集获取
      • 使用提示
    • 辅助工具代码 (`utils_for_huitu.py`)
    • 读取数据
    • 预处理数据
    • 自定义语义分割数据集类
    • 读取数据集
    • 整合所有组件
  • 总结


前言

大家好!欢迎来到“从代码学习深度学习”系列。今天,我们将深入探讨计算机视觉中一个非常重要且有趣的任务——语义分割。语义分割的目标是将图像中的每个像素分配给一个特定的类别,从而实现对图像内容的像素级理解。这与目标检测(仅识别物体边界框)和图像分类(对整个图像进行单一标记)不同,语义分割提供了更精细的场景理解。

在本篇博客中,我们将:

  1. 理解什么是语义分割,以及它与图像分割和实例分割的区别。
  2. 详细了解一个经典的语义分割数据集——Pascal VOC2012。
  3. 通过 PyTorch 代码学习如何读取、预处理和加载这个数据集,为后续的模型训练打下坚实的基础。

让我们开始吧!

完整代码:下载链接

什么是语义分割?

语义分割(semantic segmentation)问题重点关注于如何将图像分割成属于不同语义类别的区域。与目标检测不同,语义分割可以识别并理解图像中每一个像素的内容:其语义区域的标注和预测是像素级的。下图展示了语义分割中图像有关狗、猫和背景的标签。与目标检测相比,语义分割标注的像素级的边框显然更加精细。

在这里插入图片描述

图像分割和实例分割

图像分割将图像划分为若干组成区域,这类问题的方法通常利用图像中像素之间的相关性。它在训练时不需要有关图像像素的标签信息,在预测时也无法保证分割出的区域具有我们希望得到的语义。以上图中的图像作为输入,图像分割可能会将狗分为两个区域:一个覆盖以黑色为主的嘴和眼睛,另一个覆盖以黄色为主的其余部分身体。

实例分割也叫同时检测并分割(simultaneous detection and segmentation),它研究如何识别图像中各个目标实例的像素级区域。与语义分割不同,实例分割不仅需要区分语义,还要区分不同的目标实例。例如,如果图像中有两条狗,则实例分割需要区分像素属于的两条狗中的哪一条。

Pascal VOC2012 语义分割数据集

Pascal VOC2012 语义分割数据集介绍

Pascal VOC2012 (Visual Object Classes) 是计算机视觉领域中最经典和广泛使用的数据集之一,特别在语义分割 (Semantic Segmentation) 任务中具有重要地位。

基本信息

  • 全称:PASCAL Visual Object Classes Challenge 2012
  • 发布机构:由英国牛津大学、微软剑桥研究院等机构联合发起
  • 主要任务:目标检测、语义分割、分类等

语义分割部分特点

  • 图像数量
    • 训练集:1,464张图像
    • 验证集:1,449张图像
    • 测试集:1,456张图像 (标签非公开)
    • 总共包含11,540个可分割对象
  • 类别:共21个类别,包括20个前景对象类别和1个背景类别:
    • 背景 (background)
    • 人 (person)
    • 动物 (bird, cat, cow, dog, horse, sheep)
    • 交通工具 (airplane, bicycle, boat, bus, car, motorbike, train)
    • 室内物品 (bottle, chair, dining table, potted plant, sofa, tv/monitor)

数据格式

  • 图像:标准JPG格式
  • 分割标注:PNG格式的标签图,每个像素值对应一个类别索引
  • 目录结构
    • JPEGImages:存放原始图像
    • SegmentationClass:存放语义分割标签,标签也采用图像格式,其尺寸和它所标注的输入图像的尺寸相同。 此外,标签中颜色相同的像素属于同一个语义类别
    • ImageSets/Segmentation:存放训练、验证和测试集的图像名称列表

评价指标

Pascal VOC2012使用的主要评价指标是平均交并比(mean Intersection over Union, mIoU),计算方式为:

  • 对每个类别计算IoU(真实区域与预测区域的交集除以并集)
  • 计算所有类别IoU的平均值

应用价值

  1. 基准测试:作为评估分割算法性能的重要基准
  2. 算法开发:FCN、DeepLab、PSPNet等经典分割网络都在此数据集上进行了测试
  3. 学术研究:大量语义分割相关论文都使用此数据集进行实验验证
  4. 预训练模型:常用于训练可迁移到其他任务的基础模型

数据集获取

可以从Pascal VOC官方网站下载完整数据集:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/

使用提示

  • 由于原始训练集较小,研究中通常会使用扩展版本SBD(Semantic Boundaries Dataset),将训练样本增加到约10,000张
  • 难点在于物体边界的精确分割以及不同类别之间的区分
  • 适合入门语义分割任务的学习和研究

Pascal VOC2012是计算机视觉领域的经典数据集,尽管发布已有多年,但仍然是评估分割算法性能的重要标准之一。

辅助工具代码 (utils_for_huitu.py)

为了方便地显示图像,我们通常会使用一些辅助函数。以下是 utils_for_huitu.py 文件的内容,它提供了一个 show_images 函数。

# 导入必要的包
import matplotlib.pyplot as plt  # 用于创建和操作 Matplotlib 图表
from matplotlib_inline import backend_inline  # 用于设置 Jupyter 中的显示格式
from IPython import display  # 用于在 Jupyter 中实现动态显示功能
import torchdef show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):"""绘制图像列表参数:imgs: 要显示的图像列表num_rows: 行数num_cols: 列数titles: 每张图像的标题,默认为Nonescale: 图像缩放比例,默认为1.5返回:matplotlib的轴对象列表"""# 计算图像尺寸,根据行列数和缩放比例确定figsize = (num_cols * scale, num_rows * scale)# 创建子图fig, axes = plt.subplots(num_rows, num_cols, figsize=figsize)# 将axes数组展平成一维数组,方便遍历axes = axes.flatten()# 遍历每个图像和对应的轴对象for i, (ax, img) in enumerate(zip(axes, imgs)):if torch.is_tensor(img):# 处理PyTorch张量类型的图像,需要转换为NumPy数组ax.imshow(img.numpy())else:# 处理PIL图像或其他类型的图像ax.imshow(img)# 隐藏x轴刻度和标签ax.axes.get_xaxis().set_visible(False)# 隐藏y轴刻度和标签ax.axes.get_yaxis().set_visible(False)# 如果提供了标题,则设置对应图像的标题if titles:ax.set_title(titles[i])# 返回轴对象列表,方便后续自定义处理return axes

读取数据

我们首先编写一个函数 read_voc_images 来读取Pascal VOC2012数据集的图像和对应的语义分割标签。

import os
import torch
import torchvisiondef read_voc_images(voc_dir, is_train=True):"""读取Pascal VOC2012数据集的图像和对应的语义分割标签参数:voc_dir (str): VOC数据集根目录路径is_train (bool): 是否读取训练集数据,True表示读取训练集,False表示读取验证集返回:tuple: (features, labels)- features (list): 包含所有图像张量的列表,每个张量形状为[3, H, W]- labels (list): 包含所有标签张量的列表,每个张量形状为[1, H, W]"""# 确定读取训练集还是验证集的文件列表txt_fname = os.path.join(voc_dir, 'ImageSets', 'Segmentation','train.txt' if is_train else 'val.txt')# 设置读取模式为RGB (使用torchvision的常量)mode = torchvision.io.image.ImageReadMode.RGB# 从文本文件中读取图像文件名列表with open(txt_fname, 'r') as f:images = f.read().split()  # 列表,每个元素是不带扩展名的图像文件名# 初始化特征(图像)和标签(分割掩码)列表features = []  # 将存储图像张量,每个张量形状为[3, H, W]labels = []    # 将存储标签张量,每个张量形状为[1, H, W]# 遍历所有图像文件名并读取对应的图像和标签for i, fname in enumerate(images):# 读取原始图像,形状为[3, H, W],值范围为0-255的整数image_path = os.path.join(voc_dir, 'JPEGImages', f'{fname}.jpg')image_tensor = torchvision.io.read_image(image_path)features.append(image_tensor)# 读取语义分割标签,形状为[3, H, W],值范围为0-255的整数label_path = os.path.join(voc_dir, 'SegmentationClass', f'{fname}.png')label_tensor =

相关文章:

从代码学习深度学习 - 语义分割和数据集 PyTorch版

文章目录 前言什么是语义分割?图像分割和实例分割Pascal VOC2012 语义分割数据集Pascal VOC2012 语义分割数据集介绍基本信息语义分割部分特点数据格式评价指标应用价值数据集获取使用提示辅助工具代码 (`utils_for_huitu.py`)读取数据预处理数据自定义语义分割数据集类读取数…...

【计算机视觉】OpenCV实战项目:Deep Machine Learning Tutors:基于OpenCV的实时面部识别系统深度解析

Deep Machine Learning Tutors:基于OpenCV的实时面部识别系统深度解析 1. 项目概述2. 技术原理2.1 面部识别流程2.2 关键技术组件2.2.1 Haar级联分类器2.2.2 深度特征提取 3. 项目实现细节3.1 系统架构3.2 核心算法实现3.2.1 人脸检测3.2.2 实时处理流水线 4. 项目运…...

OSCP - Proving Grounds - EvilBox-One

主要知识点 类似黑盒测试,毫无线索的情况下只能去猜,如果是php文件则会比较容易达到入侵的目的即使有php文件了,由于不知道代码,只能测试一下有没有文件包含漏洞所以反正没线索的时候,就只能猜 具体步骤 nmap扫描&a…...

初识Linux · 传输层协议TCP · 下

目录 前言: 滑动窗口和流量控制机制 流量控制 滑动窗口 1.滑动窗口如何移动 2.滑动窗口的大小如何变化的 3.如果发生了丢包如何解决(快重传) 拥塞控制 延迟应答 面向字节流 RST PSH URG 什么是 PSH? 什么是 URG&…...

OpenCv实战笔记(4)基于opencv实现ORB特征匹配检测

一、原理作用 ORB 原理(Oriented FAST and Rotated BRIEF): 特征点检测:使用 FAST 算法检测角点(关键点)。 方向计算:为每个关键点分配主方向,增强旋转不变性。 特征描述&#xff1a…...

LeetCode LCR 007. 三数之和 (Java)

题目描述 给定一个整数数组 nums,判断是否存在三个元素 a, b, c,使得 a b c 0?找出所有满足条件且不重复的三元组。 解题思路 核心方法:排序 双指针 排序:首先将数组排序,便于后续去重和双指针操作。…...

Spark的三种部署模式及其特点与区别

Spark支持多种集群部署模式,主要分为以下三类: 部署模式特点适用场景资源管理依赖Local模式单机运行,所有进程(Driver、Executor)在同一个JVM中开发调试、小规模数据测试无集群资源管理,仅本地线程模拟无需…...

2505d,d的借用检查器

void func(scope ref int*) {}unique(int*) a ...; assert(a !is null);unique(int*) b a; assert(a is null); assert(b !is null);func(b); // ok用live作为检查器,不必有断定了. int* a ...; int* b a; // 所有权转至b *a 3; // 不能再用a.编译器保证约束指针. live…...

前端EXCEL插件,智表ZCELL产品V3.0 版本发布,底层采用canvas全部重构,功能大幅扩展,性能极致提升,满足千万级单元格加载

本次更新是底层全部重构,按照现代浏览器要求,采用canvas方式进行了重构,预留了将来扩展空间,特别是在大数据量性能提升方面有了较大提升,可以满足千万级单元格加载,欢迎大家体验使用。 体验地址&#xff1…...

如何理解编程中的递归、迭代与回归?

作为编程初学者,递归、迭代和回归这三个概念常常让人感到困惑。本文将通过生活化的比喻、Python代码示例和直观的对比,帮助你彻底理解这三个重要概念及其应用场景。 一、从生活比喻理解核心概念 1. 递归(Recursion)—— 俄罗斯套…...

【金仓数据库征文】学校AI数字人:从Sql Server到KingbaseES的数据库转型之路

摘要:本文围绕学校 AI 数字人项目从 Sql Server 数据库替换至 KingbaseES 数据库的实践展开,涵盖迁移背景、两种数据库对比、替换实施步骤、应用效果展示、问题与解决措施等多方面内容,为教育领域类似项目提供了详实参考。 目录 1.背景与需求…...

stm32 lcd绘制波形和频谱

一、项目准备 主要利用LCD驱动中的画点和画连线函数,驱动是正点原子给我写好了的画点和画线的函数等些相关函数 void LCD_Draw_Circle(u16 x0,u16 y0,u8 r); //画圆 void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //画线 二、画波形图函数实…...

深入理解卷积神经网络的输入层:数据的起点与预处理核心

内容摘要 本文围绕卷积神经网络输入层展开,详细介绍其在网络中的重要作用,包括接收不同领域数据的形式及传递数据的过程。深入解读数据预处理的关键操作,如去均值、归一化和PCA/白化。助力读者透彻理解输入层,为构建高效卷积神经…...

基于大模型与异步技术的股票分析系统实现

在金融量化分析领域,高效的数据获取与智能的策略决策是核心竞争力。本文结合异步数据抓取技术与大模型工具集成,构建一套完整的股票分析系统,实现从海量数据采集到智能信息查询的全流程自动化。 一、量化分析的数据基石:异步高效…...

BUCK基本原理学习总结-20250509

一、电感伏秒平衡特性 处于稳定状态的电感,开关导通时间(电流上升段)的伏秒数须与开关关断(电流下降段)时的伏秒数在数值上相等,尽管两者符号相反。这也表示,绘出电感电压对时间的曲线,导通时段曲线的面积必须等于关断时段曲线的面积。 二、BUCK的基本概念和原理 基…...

BERT类模型

1. BERT类模型是否需要处理 [CLS] 或池化? 那首先搞懂 [CLS] 和池化 (1)[CLS] 的作用 BERT 的输入格式中,每个序列的开头会添加一个特殊的 [CLS] Token(Classification Token)。它的设计初衷是为分类任务…...

Taro 编译不平不同平台小程序

Taro 提供了针对不同小程序平台的编译命令,主要通过 --type 参数指定目标平台。以下是各平台常用命令及说明: --- ### **一、核心命令格式** 1. **直接使用 taro-cli** bash taro build --type [平台类型] taro dev --type [平台类型] # 开发模式&…...

PHP框架在分布式系统中的应用!

随着互联网业务的快速发展,分布式系统因其高可用性、可扩展性和容错性成为现代应用架构的主流选择。而PHP作为一门成熟的Web开发语言,凭借其简洁的语法、丰富的框架生态和持续的性能优化,逐渐在分布式系统中崭露头角。本文将深入探讨PHP框架在…...

PCB设计实践(十三)PCB设计中差分线间距与线宽设置的深度解析

一、差分信号的基本原理与物理背景 差分信号技术通过两条等幅反相的传输线实现信号传输,其核心优势体现在电磁场耦合的对称性上。根据麦克斯韦方程组的对称解原理,两条线产生的电磁场在远场区域相互抵消,形成以下特性: 1. 共模噪…...

在 Kubernetes 中使用 Docker 实现 GPU 支持的完整方案

目录 在 Kubernetes 中使用 Docker 实现 GPU 支持的完整方案 一、背景说明 二、目标 三、环境准备 四、安装 NVIDIA Container Toolkit(nvidia-docker2) 五、配置 Docker 支持 NVIDIA Runtime 六、测试 Docker 能否使用 GPU 七、部署 Kubernetes…...

Vision Transformer(ViT)

Vision Transformer(ViT)是一种将​​Transformer模型​​应用于计算机视觉任务的创新方法,由Google Research团队在2020年提出。它打破了传统卷积神经网络(CNN)在图像处理中的主导地位,通过全局注意力机制…...

(剪映)字幕实现卡拉OK效果

三种实现方式: 一、剪映自带“模板” 二、剪映自带“动画” 三、使用蒙版特效 具体操作步骤如下 模板的方式 一、模板的方式 1.在时间线轨道区 选中文本 2.在工具栏区中的文本-->模板中选择要实现的效果,左键单击,即可实现效果&am…...

Java结构化并发深度解析:原理、设计与实践

作为Java开发者,当我们需要处理复杂的并发场景时,传统的线程和ExecutorService模型往往导致代码难以维护和调试。Java 21引入的结构化并发(Structured Concurrency)通过创新的设计理念彻底改变了这一局面。本文将深入剖析其实现原理、架构设计,并通过复杂场景案例展示其强大…...

【Linux系列】跨平台安装与配置 Vim 文本编辑器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Level1.5算数运算符与赋值运算符

目录 一、算术运算符和赋值运算符 1.1算术运算符 - * / % // ** 1.2.赋值运算符 - * / % // ** 二、等比例缩小(变量火柴人案例) 三、颜色的三种表达方法取余%运算 1.颜色单词 turtle.pencolor(pink) 2.RGB颜色turtle.pe…...

基于GF域的多进制QC-LDPC误码率matlab仿真,译码采用EMS算法

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 本课题实现的是四进制QC-LDPC 仿真操作步骤可参考程序配套的操作视频。 2.算…...

CentOS 7 修改锁屏时间为永不

在 CentOS 7 中,默认情况下,系统会在一定时间不活动后自动锁屏。对于某些用户来说,可能希望禁用自动锁屏功能或者将锁屏时间设置为“永不”。本文将介绍如何通过图形界面和命令行两种方式修改 CentOS 7 的锁屏时间,确保系统永不自…...

STM32-ADC模数转换器(7)

对GPIO来说,它只能读取引脚的高低电平,使用了ADC模数转化器之后,就可以对高电平和低电平之间的任意电压进行量化,最终用一个变量来表示,读取这个变量,就能得到引脚输入的具体电压是多少了。 ADC模数转化器…...

前端SSE技术详解:从入门到实战的完整指南

前端SSE技术详解:从入门到实战的完整指南 一、初识SSE:比WebSocket更轻量的选择 很多开发者第一次听说Server-Sent Events(SSE)时,都会下意识问:“这和WebSocket有什么区别?” 就像选择交通工…...

mac u盘重装mac10.15Catalina系统

我的电脑提mac2017的air 重装过程 (文件夹中间有空格时为 Install\ macOS\ Catalina 才行) (有需要的,最好做一下备份,有些东西可以及时找到配置和文件之类的, u盘制作是在mac电脑上操作的) 一、先下载系统镜像文件或自行到官方…...

8051模板移植

8051模板移植 一,新建工程文件二,Keil配置 一,新建工程文件 在工程文件下建立Driver和User 打开Keil,点击扳手选择芯片型号 出现下图情况,选择是,然后会多出一个启动文件,以后有用 二&…...

轻松制作高质量视频,实时生成神器LTX-Video重磅登场!

探索LTX-Video:实时视频生成跨越新高度 在如今这个视觉内容主导的数字时代,视频生成成为推动创意表达的关键。而今天,我们将带您深入探索LTX-Video,一个强大的开源项目,致力于通过尖端技术将视频生成提升到一个全新的…...

两个数组的交集(暴力、set、哈希)

一.题目 给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2]示例 2: 输入&#xf…...

[架构之美]Spring Boot多环境5种方案实现Dev/Test/Prod环境隔离

[架构之美]Spring Boot多环境5种方案实现Dev/Test/Prod环境隔离(十六) 摘要:本文深入剖析Spring Boot多环境配置的5种实现方案,涵盖YAML分组配置、Maven Profile集成、Kubernetes适配等企业级实践,并附赠配置加密方案…...

LWIP的IP协议笔记

IP协议简介 IP协议是TCP/IP协议族的基石,它为上层提供无连接、不可靠的服务 无连接:指IP通信双方都不长久的维持对方的任何信息。这表示上层协议每次发送数据,都需要明确指出对方的IP地址 不可靠:指IP协议不能把IP数据报准确到…...

matlab介绍while函数

MATLAB 中的 while 语句介绍 在 MATLAB 中,while 语句是一种循环结构,用于在满足特定条件时反复执行一段代码块。与 for 循环不同,while 循环的执行次数是动态的,取决于循环条件是否为真。 语法 while condition% 循环体代码 e…...

每日算法刷题Day2 5.10:leetcode数组1道题3种解法,用时40min

4.LC 旋转矩阵(中等,学习) 面试题 01.07. 旋转矩阵 - 力扣(LeetCode) 思想: 法一: 额外空间数组来回赋值拷贝 法二: 1.翻转90度得到等式a[j][n-i-1]a[i][j],但是会改变a[j][n-i-1]原始值,再去看该位置变到哪一位置 分析可得,4个…...

【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解

1.约定前后端交互接口 [请求] /book/getListByPage [参数] currentPage1&pageSize10 [响应] 返回封装的result对象对应的Json数据 2. 整体逻辑 2.1 Controller的逻辑 (1)把接收的参数封装为PageRequest类,里面有属性:curren…...

本地大模型工具深度评测:LM Studio vs Ollama,开发者选型指南

引言 在大语言模型本地化部署的技术浪潮中,隐私保护与成本优化成为核心诉求。LM Studio与Ollama作为两款明星级本地大模型工具,凭借对开源模型的支持能力,成为开发者关注的焦点。本文将从技术架构、应用场景、实操体验三个维度展开深度对比&a…...

天线的PCB设计

目录 天线模块设计的重要性 天线模块的PCB设计 天线模块设计的重要性 当智能手表突然断连、无人机信号飘忽不定——你可能正在经历一场来自天线模块的"无声抗议"。这个隐藏在电子设备深处的关键组件,就像数字世界的隐形信使,用毫米级的精密结…...

《P1226 【模板】快速幂》

题目描述 给你三个整数 a,b,p,求 abmodp。 输入格式 输入只有一行三个整数,分别代表 a,b,p。 输出格式 输出一行一个字符串 a^b mod ps,其中 a,b,p 分别为题目给定的值, s 为运算结果。 输入输出样例 输入 #1复制 2 10 9输…...

推荐一款免费开源工程项目管理系统软件,根据工程项目全过程管理流程开发的OA 办公系统

在当今的工程项目管理领域,许多企业和团队面临着诸多难题。传统的管理方式往往依赖于人工记录和分散的工具,导致项目进度难以实时把控,任务分配不够清晰,合同管理混乱,事件提醒不及时,财务管理缺乏系统性&a…...

AZScreenRecorder最新版:功能强大、操作简便的手机录屏软件

AZScreenRecorder最新版是一款功能强大的手机录屏软件,专为安卓设备设计。它无需ROOT权限,支持无限录制时长,操作简单,录制过程中可以随时暂停,满足不同用户的个性化录屏需求。此外,用户还可以自定义分辨率…...

[sklearn机器学习概述]机器学习-part3

获取数据、数据处理、特征工程后,就可以交给预估器进行机器学习,流程和常用API如下。 1.实例化预估器(估计器)对象(estimator), 预估器对象很多,都是estimator的子类(1)用于分类的预估器sklearn.neighbors.KNeighbors…...

[模型选择与调优]机器学习-part4

七 模型选择与调优 1 交叉验证 (1) 保留交叉验证HoldOut HoldOut Cross-validation(Train-Test Split) 在这种交叉验证技术中,整个数据集被随机地划分为训练集和验证集。根据经验法则,整个数据集的近70%被用作训练集&#xff…...

PyTorch API 1 - 概述、数学运算、nn、实用工具、函数、张量

文章目录 torch张量创建操作索引、切片、连接与变异操作 加速器生成器随机采样原地随机采样准随机采样 序列化并行计算局部禁用梯度计算数学运算常量逐点运算归约操作比较运算频谱操作其他操作BLAS 和 LAPACK 运算遍历操作遍历操作遍历操作遍历操作遍历操作遍历操作遍历操作遍历…...

如何在mac上使用便利贴

可以在 App Store 下载便利贴应用实现在电脑上贴便条的效果。 以 「桌面便利贴」这款应用为例,创建的便利贴会像桌面上的文件一样展示在桌面上,随时可以查看。还可以修改便笺的颜色、透明度、字体、高亮等等。 我比较喜欢的功能是将便签固定在所有窗口的…...

Linux——Mysql索引和事务

目录 一,Mysql索引介绍 1,索引概述 1,索引的优点 2,索引的缺点 2,索引作用 3,索引分类 普通索引 唯一索引 主键索引 组合索引 全文索引 4,查看索引 5,删除索引 6&…...

vim 查看复杂的宏扩展

在一些复杂项目中,使用宏可以简化代码。但是对于刚接触项目的人来说,分析层层嵌套的宏,是件头疼的事情。 使用 vim 的多窗口功能,可以为此提供一些帮助。 如下图,分析4层嵌套的宏,DEFINE_I440FX_MACHINE -…...

【计算机视觉】OpenCV项目实战:基于OpenCV的图像分割技术深度解析与实践指南

基于OpenCV的图像分割技术深度解析与实践指南 项目概述与技术背景项目核心特点传统分割算法分类 环境配置与项目结构系统要求安装步骤项目结构解析 核心算法实现解析1. 阈值分割(Otsu方法)2. Canny边缘检测3. 分水岭算法 实战应用指南1. 基础分割流程2. …...