数据库学习完整大纲:从SQL基本功到实战性能优化

数据库学习大纲SQL基本功MySQL 本内容遵循CC 4.0 BY-SA版权协议
抹茶柚子冰 抹茶柚子冰 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要

很多朋友学数据库,一上来就是“MySQL要学什么”“Oracle怎么装”“面试问什么”,打开书背概念、收藏一堆教程,结果真到用的时候,连一个多表查询都写不顺。我这些年带过不少人,也见过各种学习路径,发现大多数问题不是出在笨,而是出在“学得太碎”——今天刷一道题,明天看一个索引原理,后天又去折腾工具,知识全是散的,串不起来。所以我把数据库学习整理成一个完整的大纲,这是第一部,重点解决“学习主线”和“认知框架”的问题。不管你是刚接触数据库的新手,还是写过一些SQL但始终感觉不系统的开发者,这篇文章都适合你。我会从大局观、核心概念、SQL基本功、原理深度、工具链以及实战衔接几个角度,把数据库学习这件事讲透,保证你读完心里有张地图。

1. 先搞清楚一件事:你学数据库到底是为了什么

我见过太多人学数据库学得很痛苦,根源在于他根本没想明白自己为什么要学。数据库不是一个“死记硬背”的学科,它是一套解决数据存储与处理问题的工程体系。你是奔着做后端开发去的、还是奔着做DBA去的、还是奔着做数据分析去的,学习侧重完全不同。如果方向没想清楚,你就会陷入一个啥都想学、啥都没学透的死循环。

1.1 不同岗位对数据库技能的需求差异

先看看市面上常见的三类人:

  • 后端开发/全栈开发:这类人使用数据库的频率最高,核心目标是“会建模、会写SQL、会调优基本查询、知道事务怎么用”。你的重心应该放在InnoDB引擎、索引设计、SQL执行计划、事务隔离级别这些工程实战内容上。
  • 专业DBA/数据库运维:这类人要管的事多得多,包括安装部署、主从复制、备份恢复、性能监控、参数调优、高可用架构。刚入门的新手如果直接奔着这条路走,很容易被各种命令行参数劝退。
  • 数据分析/数据产品:这类人主要跟查询打交道,学习的核心是SQL的聚合、连接、窗口函数以及数仓分层的思维,对于底层存储引擎反而不需要研究得那么深。

所以你看,同样是学数据库,路径完全不一样。我建议你按照自己的职业方向去做减法,而不是一开始就试图吞下所有内容。数据库学习大纲的第一件事,不是“从第一章看到第十章”,而是先给自己画一条专属路线。

1.2 学习路线上的轻重缓急怎么排

以最常见的后端开发路线为例,我个人的建议是分成四步走:

第一,先把SQL写得滚瓜烂熟,尤其是SELECT怎么查、JOIN怎么连、GROUP BY怎么聚合,这一步是纯语法加练习,没什么难度,一周就能入门。第二,把“表结构设计”搞明白,包括主键怎么选、字段类型怎么定、三大范式怎么理解,这决定了你以后写的库好不好用。第三,再深入原理,搞懂索引的数据结构、事务ACID、锁与并发控制,这一步是面试重点,也是你排查线上问题的底气。第四,最后学工具链,比如客户端连接工具、命令行操作、导入导出、简单的数据同步方案。

很多人的误区是:一上来就钻研原理,索引B+树画得头头是道,结果连接查询还有一半写不对。这就好比考驾照前先研究发动机原理,不能说没用,但顺序确实不对。大纲的作用就是帮你把这个顺序掰正。

1.3 “先精通一款数据库”比“通吃所有产品”更重要

你一定会遇到一个问题:MySQL、Oracle、达梦、SQL Server、PostgreSQL,我到底该选哪个?我的态度很明确——把一款数据库学透,其他的都是“语法小差异”。数据库的原理是共通的:关系模型、SQL、事务、索引、锁,这些概念在任何一款产品里都成立,只是各自的实现细节和工具生态有所侧重。

国内用户用得最多的就是MySQL,教程多、生态全、踩坑记录也好搜。先把MySQL的常用功能吃透,再去看Oracle或者达梦,你会发现自己只需要适应数据类型、分页写法、函数名这些表面的差异,底层的逻辑迁移成本很低。这个思路放在国产数据库上尤其管用,这几年达梦、OceanBase等产品越来越普及,但面试和工作中没人会要求你从零开始学,他们要的是“你能快速上手”。

2. 认知底座:表、行、字段与键,先把这个地基打牢

很多教程讲到关系型数据库,上来就丢出“实体关系”“范式”“ER图”这些名词,初学者直接蒙圈。我换个说法:关系型数据库本质上就是一张一张的二维表格,行代表一条记录,列代表一个属性。就这么简单。你日常做的所有增删改查,本质上就是在操作这些表格。真正的难点不在于“表”这个概念本身,而在于表和表之间怎么发生关系,以及设计表的时候怎么避免埋坑。

2.1 主键、外键、索引,三者到底有什么区别

这三个概念是初学者最容易混的,我逐个拆:

  • 主键(Primary Key):用来唯一标识表中一行数据的字段。比如学生表里的学号,一个学号只能对应一个学生。主键自带唯一约束,并且一张表只能有一个主键。
  • 外键(Foreign Key):用来建立两张表之间的关联。比如订单表里有一个customer_id,指向客户表的id,这就是外键。外键能保证引用完整性,但它在实际生产环境里经常被嫌弃,因为会带来额外的锁和校验开销,很多团队会直接禁用外键,把关联逻辑放到应用层去处理。
  • 索引(Index):你可以把它理解为书的目录。它不改变表数据本身,而是给某个字段或组合字段建立一套快速查找的结构。没有索引时,查询会全表扫描;有索引后,数据库能通过数据结构快速定位到目标行。

这三者的关系用一句话总结:主键约束数据唯一性,外键约束数据关联性,索引加速数据查找。搞清楚这个,再看搜索引擎里那些“mysql设置唯一已经有重复数据库”的报错信息时,你就明白是怎么回事了——不是设置方法的问题,而是你还没理解唯一约束的判定逻辑。

2.2 范式是理论,但实践中要学会变通

书上说范式要满足第一范式、第二范式、第三范式,很多初学的人被这个唬住了,以为建表就必须一字不差地满足所有范式要求。实际上,范式的核心是避免数据冗余和更新异常,但现实项目里为了查询性能,经常会故意反范式化。

举个例子,一张订单表里存了客户名称,理论上客户名称应该在客户表里,订单表只存客户ID,这样才是符合第三范式的。但如果业务上订单查询频繁且客户几乎不变,很多设计会直接把客户名称冗余到订单表,省掉一次关联查询。这就是典型的“空间换时间”。学习大纲里我建议你把范式当成一种设计思考工具,而不是死板的教条,先学会“符合范式”的表该怎么设计,再学会“什么时候应该打破范式”。

2.3 字段类型的选择,决定了你后面会不会哭

字段类型这件事看似基础,但最考验功底。以MySQL为例,整数类型有TINYINT、SMALLINT、INT、BIGINT,如果你存一个永远不会超过几百的状态码,却用了BIGINT,那就是白占空间。再比如,存手机号、身份证号这类“看起来像数字但不是数字”的数据,一定不要用数值类型——你如果存成INT,前面带没带0都是问题,而且数值类型的运算逻辑还会导致数据被自动转换。热搜词里正好有一条“oracle数据库sql导出的身份证信息是科学计数法,怎么正确显示身份信息”,这就是典型的字段类型选错导致的后遗症,只怪当初没把字段类型当回事。

我的经验是:金额一律用DECIMAL,不用FLOAT/DOUBLE,否则精度会出问题;时间能用DATETIME/TIMESTAMP就别用字符串,否则排序和区间查询会很难受;字符串长度别贪大,VARCHAR(255)够用就别上TEXT。这些细节单拎出来都不难,但组合在一起,就是专业与非专业的分水岭。

3. SQL基本功:别只盯着增删改查,连接与集合思维才是分水岭

SQL是数据库学习的核心技能,也是很多人最不重视的部分。因为看起来简单,“不就是SELECT、INSERT、UPDATE、DELETE嘛”。但真到了笔试面试和工作场景,几张表一JOIN,先筛选条件再聚合再排序,很多人当场就乱了。热词里那句“mysql数据库join含义”能上榜,说明这绝对是大众痛点。

3.1 增删改查不只是四个单词

DML(数据操作语言)层面的增删改查,确实只有四个关键字,但每个关键字背后都有值得深挖的细节。

INSERT要考虑批量插入、冲突处理、默认值;UPDATE要特别注意条件子句,一条没有WHERE的UPDATE可以把全表数据全部改掉,这是生产事故级别的操作;DELETE不是万能的,条件删除、清理表数据、释放空间是有区别的;SELECT是变化最多的一块,字段顺序、去重、条件过滤、排序、分页、聚合、子查询,一层套一层。

我见过有人写了一条三页纸的SQL,最后发现效率极低,EXPLAIN一查,多个子查询都在做全表扫描。SQL写得好的人,思路一定是清晰的:先定位到最小数据集,再逐步关联和聚合,而不是一股脑把所有表JOIN起来再说。这也是为什么我说,SQL训练的重点不是记住语法,而是培养“集合思维”。

3.2 JOIN为什么这么难理解

JOIN的本质是“把两张表按照某个关联条件横向拼接”。理解JOIN的关键在于区分三种情况:

  • INNER JOIN:只保留两边都匹配得上的行。
  • LEFT JOIN:左表全部保留,右表没有匹配的字段用NULL填充。
  • RIGHT JOIN:右表全部保留,左表没有匹配的字段用NULL填充。

很多人背了定义,但一碰到实际需求就懵。比如“查出所有学生以及他们的成绩”,如果你用INNER JOIN,那些没有成绩记录的学生就会被过滤掉;如果需求是“所有学生都要列出来,成绩没有就显示NULL”,那就必须用LEFT JOIN。差别就在这一个字上,结果完全不一样。

还有一个高频坑:多表JOIN时没有指定关联条件,产生笛卡尔积。两张表各有1000条数据,不加ON条件直接JOIN,结果就是100万行,卡死都是轻的。所以写JOIN永远记得把ON条件写完整,并且在动手之前先在草稿纸上弄清楚你想要的“主表”是哪一张。

3.3 聚合、分组和HAVING的常见误区

GROUP BY用来对数据进行分组,然后配合聚合函数SUM、COUNT、AVG、MAX、MIN做汇总。这个环节最经典的报错是:SELECT了分组键之外的其他字段,而数据库的SQL_MODE又不允许。还有一些人搞不清WHERE和HAVING的区别——WHERE是分组前过滤行,HAVING是分组后过滤组。顺序记不清时,你就想想“查业绩超过100万的部门”,先按部门分组,再用HAVING过滤;而“只查北京地区的员工再分组”则需要先用WHERE把地区过滤掉。

聚合查询写多了以后,你会发现SQL和Excel透视表很像,核心都是“分组+汇总”,只是SQL需要你用文本把逻辑表达出来。日常练习时,我建议拿一个真实的业务数据集反复练,比如经典的订单表加商品表,自己出题自己写SQL,写不出来就拆解,写完再对比执行计划,这个环节能明显拉开和普通人的差距。

4. 深入原理:索引、事务、锁与并发控制,理解数据库的“内功”

如果只会写SQL,那你只是一个“使用者”;要学会诊断问题、优化性能、搞定面试,就必须深入原理层。这部分也是《数据库教程学习大纲》第一部的重头戏。很多人觉得原理枯燥,但换个角度想:数据库本质上就是一个帮你管理数据的软件,索引可以理解为文件柜里的标签抽屉,事务可以理解为一组操作要么全成功要么全不做的保险机制,锁则是多人协作时防止冲突的规则。理解了这些贴近生活的类比,原理就没那么可怕了。

4.1 索引到底是怎么加速的

大多数关系型数据库用的是B+树索引。它是一个多路平衡搜索树,所有数据都存在叶子节点,且叶子节点之间通过指针相连。所以走索引查询时,数据库从根节点一路向下,找到叶子节点就能拿到目标数据;而全表扫描则是从头到尾一页一页翻。两者的差异在小数据量时感觉不明显,一旦表里有个几百万行,有没有走对索引,查询时间可能差出几个数量级。

索引不是越多越好,因为每次INSERT、UPDATE都要同步维护索引,索引过多会严重影响写性能。我在项目中见过为了查询爽快一口气建了十几个索引的,结果写入一慢,又跑回来问为什么。正确的姿势是:根据实际查询场景建立索引,优先考虑覆盖高频查询条件的联合索引,同时要理解最左前缀原则——联合索引里,查询条件用不上最左字段时,索引就发挥不了作用。

还有一类常见问题是索引失效。你在索引列上用了函数、做了隐式类型转换、用了左模糊匹配,优化器就可能放弃索引。这类细节需要平时多积累经验,最好每个坑都亲自踩一遍,印象才深刻。

4.2 事务ACID与隔离级别的取舍逻辑

事务的四大特性——原子性、一致性、隔离性、持久性,背出来很容易,关键是怎么理解。原子性说的是事务里的操作要么全成要么全败,没有中间状态;拿转账来说,A扣钱和B到账必须同时发生。一致性是说数据从一个合法状态变成另一个合法状态,比如总金额不变。隔离性是多个事务同时跑的时候互不干扰。持久性是指一旦提交,数据就永久写入了。

隔离性不是绝对的,数据库提供了四种隔离级别:读未提交、读已提交、可重复读、串行化。级别越低,并发能力越强,但可能出现脏读、不可重复读、幻读;级别越高,数据越安全,但并发性能越差。MySQL默认是可重复读,而Oracle、达梦等默认是读已提交,这是产品设计上的差异,也直接影响到具体业务代码里锁的行为。很多并发问题的排查,最终都会回到“你用的是哪一级隔离级别”这个问题上。

4.3 死锁是怎么产生的,以及真正的排查方法

热词里“数据库死锁”和“数据库并发锁”被反复搜索,说明这是生产环境里非常磨人的问题。死锁的根本原因是两个或多个事务各自持有对方需要的锁,互相等待,谁也不让谁,最后只能靠数据库的死锁检测机制来终止其中一个事务。

排查死锁的思路是有套路的:

  • 第一步,找到死锁日志。MySQL里用SHOW ENGINE INNODB STATUS,能看到最近一次死锁涉及的事务和锁信息。
  • 第二步,分析事务里SQL的执行顺序。你不需要懂全部细节,关键是确认每个事务持有哪把锁、等待哪把锁。
  • 第三步,想办法消除循环等待。通常是统一事务里SQL的加锁顺序,比如事务A先更新表1再更新表2,事务B也必须先更新表1再更新表2。

我自己的体会是,大部分人遇到死锁先慌了,直接重启应用,结果没过多久又死锁。正确的做法是把死锁报警当成一次宝贵的线索,冷静打开日志,把事务的SQL顺序列出来,大概率能发现业务代码里两条更新路径的锁顺序不一致。

4.4 执行计划:和数据库优化器对话的唯一方式

排查SQL性能问题离不开EXPLAIN命令。EXPLAIN会告诉你查询会怎么执行:走没走索引、扫描了多少行、有没有临时表、有没有文件排序。我每次拿到一条慢SQL,第一步不是猜,而是先EXPLAIN,看type字段是不是all、key字段是不是NULL、rows字段是不是远超预期。这三个值扫一眼,问题基本就能定位个七七八八。

学习执行计划不需要把所有字段全背下来,你先关注type从好到差的大致排序就行:system、const、eq_ref、ref、range、index、all。只要看到all,就说明是全表扫描,大概率有优化空间。在此基础上再结合索引知识去调整SQL或加索引,这才是科学的调优路径,靠瞎猜或者暴力加索引是走不远的。

5. 工具链:客户端、命令行、导入导出与数据同步的那些事

学数据库不可能不碰工具。工具的好坏直接决定你的日常效率和使用体验。很多教程不把工具当回事,我反而觉得工具这块值得单独开一篇来说。因为初学者最大的挫败感,往往不是SQL不会写,而是“不知道怎么连上数据库”“导入Excel一直报错”“数据同步又中断了”。

5.1 图形化客户端:Navicat、DBeaver、Workbench怎么选

市面上主流的图形化客户端各有特点:

  • Navicat:功能全、界面友好,支持MySQL、Oracle、PostgreSQL、达梦等多种数据库,但收费,团队里经常用破解版,我不推荐这么干。
  • DBeaver:开源免费,基于Eclipse,跨平台,社区版已经很好用。它支持多种数据源,还能直接看ER图,非常适合个人学习和跨库场景。
  • MySQL Workbench:官方出品,免费,和MySQL的兼容性最好,但界面稍微老旧一些,偶尔会有闪退。

工具这个东西没有绝对好坏,关键是顺不顺手。热词里有人搜“dbeaver怎么创建数据库”,其实很多图形化工具大差不差,连上服务实例之后,右键schema就能新建数据库。上手时不用贪多,找一款主力的,把连接管理、查询编辑、结果导出这几个核心功能用熟,对你来说就足够了。

5.2 命令行为什么还是绕不开

图形化工具虽好,但命令行仍然是绕不开的。原因有几个:第一,服务器上往往只有命令行环境,你总不能每次都装个客户端;第二,很多批量操作、脚本自动化,只能靠命令行完成;第三,真正的高频运维指令,比如查看进程、分析状态变量、手动触发主从同步,命令行是最直接的。我建议你至少在本地装好一个数据库环境,坚持用mysql命令行写一段时间的SQL,养成不看自动补全也能把语句写完整的习惯。

5.3 Excel导入数据库与导出科学计数法的坑

日常办公里,“把Excel数据导入数据库”是出现频率最高的需求之一。实操步骤一般是:把Excel另存为CSV格式,注意编码尽量选UTF-8;然后用数据库客户端的导入向导,或者直接用LOAD DATA命令;导入前先建好目标表,字段顺序要和文件列保持一致。这里面最常见的坑是编码问题,CSV里是GBK,数据库里是UTF-8,导进去中文直接乱码。

反过来也一样,从数据库导出数据到Excel,身份证号码、长数字容易被转成科学计数法。搜索热词里那条“oracle数据库sql导出的身份证信息是科学计数法”其实就是这类问题。解决办法并不复杂:导出的时候把身份证号先转成字符串,或者导出后再把Excel对应列设置为文本格式。但这个不起眼的细节,搞不定会让人抓狂。

5.4 数据同步软件的价值与常见方案

数据同步属于数据库工程化的重要一环,热词里“数据库同步软件”“数据库同步工具”被反复搜,说明很多人在学习阶段就会遇到“怎么把A库的数据弄到B库”。对于小体量场景,最简单的是用mysqldump导出再导入;复杂一点的场景,比如主从复制,靠的是binlog日志的传输和重放,这是数据库自带的能力,不是外部软件。还有一些增量同步工具,可以监听binlog变化并转发到另一个数据库或消息队列。

学习阶段我不建议一上来就研究同步方案,先理解同步的本质是“数据搬移”就行了。等你在真实项目里遇到跨机房、主从延迟、异构数据库同步的需求时,再按“全量+增量”的思路去选择工具,就水到渠成了。

6. 从理论走向实战:课程设计、面试准备与国产数据库的衔接

最后一个部分,我想聊聊学了这么多之后,怎么把它转化为看得见摸得着的东西。数据库不是学完概念就结束的,它最终要落到课程设计、项目开发、面试答题、甚至职场上的具体任务上。

6.1 数据库课程设计到底怎么做

搜热词里“数据库课程设计”排在最前面,说明这是很多在校学生的刚需。我建议你把它当成一个完整的项目来做,而不仅仅是为了交作业。

做一个数据库课程设计,一般按这几步走:

  • 选题与需求分析:确定你要做什么系统,比如学生选课系统、图书管理系统、超市进销存系统。先把核心业务模块列出来。
  • 概念结构设计:画ER图,标出实体、属性和实体之间的联系。
  • 逻辑结构设计:把ER图转换成关系表,确定每张表的字段、主键、外键。
  • 物理结构设计:选择合适的存储引擎、字符集、索引。
  • 数据库实施:用SQL建库、建表、写测试数据。
  • 应用开发:用Java、Python等语言写一个简单的控制台或Web系统,连上数据库跑通增删改查。

这套流程看似繁琐,但每一步都踩在数据库学习的核心节点上。做完一个课程设计,你对数据库的认知会比刷十套题都管用。

6.2 数据库面试题的重点方向与学习方法

面试题方向上,高频题目基本集中在几块:SQL编写(尤其多表查询、聚合、窗口函数)、索引原理与优化、事务隔离级别、锁机制与死锁、存储引擎区别、数据库三范式、海量数据优化思路(分库分表、读写分离、缓存)。搜热词里“数据库面试题”“计算机三级数据库”热度很高,说明不少人是在应试压力下才开始集中补课的。

我的建议是,面试准备不能只背题,最好是每一个高频考点都能对应到一个具体场景。比如问你“为什么用B+树不用红黑树”,你不能只背“因为B+树矮胖”,要能说出磁盘IO次数、局部性原理、范围查询友好的原因。情景化记忆的效果远好于机械背诵。

6.3 国产数据库:达梦、OceanBase、IvorySQL的衔接

近几年国产数据库发展很快,达梦、OceanBase、OpenGauss等产品纷纷进入企业视野。对于国内开发者来说,掌握这些产品的基本使用已经成为一件有性价比的事。好消息是它们大多是兼容MySQL或Oracle语法的,你只要底层原理扎实,上手成本非常低。比如达梦,很多人直接用Navicat连接,几乎能当Oracle用;OceanBase兼容MySQL协议,基本SQL、事务、索引的用法都类似。

学习时不用专门去把所有国产数据库都装一遍,看官方文档了解它们的产品定位、兼容特性、下载安装方式,再加一个最简单的“建库建表查数据”实验就够了。当真正需要你在工作中使用它们的时候,你已经有能力快速适应。

6.4 向量数据库等新方向,是机会但不是基础内容

热搜里“向量数据库”“qdrant”这些词也值得说一句。向量数据库是以向量索引为核心,服务于AI、语义检索、推荐系统等场景的数据库。它的底层逻辑和数据模型跟传统关系型数据库完全不同,更像是一个专为向量相似度计算优化过的检索系统。如果你是冲着数据库基础学习来的,我建议先把关系型数据库的底子打牢,没必要在第一天就去研究向量数据库。但如果你已经在做AI相关的项目,那可以把它当作进阶方向去了解,包括Embedding的概念、向量索引的类型(HNSW、IVF等)以及它们和传统索引的区别。

这一部大纲写到这里,主线已经比较清晰了:想清楚目标、打牢表结构认知、练熟SQL、吃透原理、掌握工具、衔接实战。数据库学习没有捷径,但确实有最优路径。把这些内容消化掉,你就已经具备了一个“能用数据库解决实际问题”的基本盘。后面的第二部,我打算展开讲性能调优、备份恢复、高可用架构和真实生产案例,那是一条更深的进阶路线。先把眼前这一部走完,你会有完全不一样的感觉。

相关推荐

基于Python+Open CV的手势识别算法设计

伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。

努力学习前端的小陈

ROS-CV-ImageConverter:将ROS图像转换为OpenCV(cv :: Mat)类型的图像

ROS-CV图像转换器 依存关系 cv_bridge(ROS软件包)

Willis Wang

计算机视觉图像处理-CV2与图像插值算法

用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int

weixin_38697274

基于水平集CV模型的图像分割(Matlab代码)

基于水平集CV模型的图像分割(Matlab代码),全套代码

小宇QAQ

导向滤波(guide_filter)的python实现

导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

zachzhan_g
返回顶部
抹茶柚子冰
博客等级 码龄8年 50粉丝 8,278原创