【真情流露】我为什么要写一本OpenCV C++书籍

这篇具有很好参考价值的文章主要介绍了【真情流露】我为什么要写一本OpenCV C++书籍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用OpenCV契机

大家好,我是贾志刚,OpenCV学堂公众号的号主,从2009年开始搞图像处理到今天我已经十四年了。刚开始搞图像处理做的是生物数据分析与细胞分析,用的是工具跟SDK是ImageJ这个框架,多数算法都是我自己裸写,不依赖任何库。直到2014年的一天有个朋友跟我说你怎么不用OpenCV,我赶快查了一下OpenCV,发现还真有,真好用,从此我就放弃造轮子了,开启了使用OpenCV做图像开发的工作。

写作本书的动机与初心

2020年以后我正式打算写一本OpenCV C++的开发书籍,原因主要是看到OpenCV多数书籍无法解决以下几个痛点(拉仇恨的):

1. OpenCV相关的书籍多数都是大而全,没有重点

当前图书市场上OpenCV相关的书籍多数都是大而全,对标的是OpenCV官方教程,多数OpenCV图书都是官方教程的翻版,把所有OpenCV模块都说了一遍,讲了一遭。但是没有重点,也没有把各个章节之间的关节打通。根据80/20的规则,学习OpenCV应该用80%的时间精力学习20%最常用的核心模块。

2. 不够面向工程化与工作岗位

没有一本OpenCV书籍是从工程实践环节所需技能倒推相关知识点,从而提炼出OpenCV相关核心模块与核心知识点,帮助读者掌握核心模块与核心知识点,满足工程实践需求。其实OpenCV虽然模块很多,但是从事机器视觉与生物医疗的图像算法开发,掌握其常用的十个模块即可。

3. 没有切实可行的案例(坦白说我这么说有点拉仇恨)

很多OpenCV书籍中讲述的案例已经远远脱离实际工程需求,有堆切案例之嫌,典型的就是打开一本OpenCV书籍就有一张讲人脸识别的或者相机矫正的,其实人脸识别这个场景其算法与模型跟SDK已经早就白菜化了,任何一个公司只要脑子没有进水,都不会再去开发,学习这种无效技能是浪费时间,无法体现自身价值。
另外一个就是相机矫正(注意:矫正跟标定不同),现在因为工业相机的质量不断提升,99%的场景下相机矫正本质就是伪命题,笔者从事机器视觉项目开发已经很多年了,落地很多项目包含顶级制造业工厂,到目前为止还没做过什么相机矫正。

4. 没有必备的深度学习知识学习

OpenCV4跟深度学习紧密联系,其中OpenCV DNN支持深度学习模块部署推理,但是在实际应用中速度稍慢,这个工程痛点目前没有OpenCV书籍有提到跟讲解过。另外在实际找工作的过程中JD中往往要求OpenCV开发者会级别的深度学习模型训练,典型的就是YOLOv系列网络训练与部署,市场上没有OpenCV书籍讲述过相关内容。

5. 很多OpenCV开发书籍以Python为主

正式落地项目与工程化的时候读者面临二次学习C++编程与OpenCV C++高级技能难题,无法成为一个真正合格的OpenCV开发者。

正是因为上述种种原因,虽然OpenCV书籍不少,真正懂得开发者需要什么样的OpenCV技能的OpenCV书籍还近乎绝迹,因此必须有个长期使用OpenCV在一线从事机器视觉跟生物医学分析的开发者站出来。

写作过程与反馈

正所谓自反而缩,虽千万人,吾往也,十年蛰伏,笔耕三年、行以成文、投书机工社、幸蒙不弃、三易其稿、得以出版、初登书市、拔得头筹、方知天下开发者苦等此书久矣,评曰:得此书厚虽不及其它,然言之有物,实乃良心之作,作者闻之心有戚戚然……

新书已经成功荣登热销榜单第一
【真情流露】我为什么要写一本OpenCV C++书籍,opencv,c++,人工智能

新书已经成功荣登热销榜单第一
【真情流露】我为什么要写一本OpenCV C++书籍,opencv,c++,人工智能

本书目录

第一部分 基础篇
第1章 OpenCV介绍与安装
1.1 OpenCV介绍
      1.1.1 OpenCV历史
      1.1.2 OpenCV模块与功能
      1.1.3 OpenCV4里程碑
1.1. OpenCV应用现状和发展趋势
1.2 OpenCV源码项目
1.3 OpenCV4开发环境搭建
1.4 第一个OpenCV开发程序
1.5 图像加载与保存
1.5.1 加载图像
1.5.2 保存图像
1.6 加载视频
1.7 小结

第2章 Mat与像素操作
2.1 Mat对象
      2.1.1什么是Mat对象
      2.1.2 一切数据皆Mat
      2.1.3 Mat类型与深度
      2.1.4 Mat对象创建
2.2 像素访问
      2.2.1遍历Mat中的像素数据
      2.2.2像素算术运算
      2.2.3位运算
      2.2.4调整图像亮度与对比度
2.3 图像类型与通道
      2.3.1图像类型
      2.2.2图像通道
      2.2.3通道操作
      
第3章  色彩空间
3.1 RGB色彩空间
3.2 HSV色彩空间
3.3 Lab色彩空间
3.4 色彩空间转换与应用
3.5 小结

第4章 图像直方图
4.1像素统计信息
4.2 直方图与绘制
4.3 直方图均衡化
4.4 直方图比较
4.5 直方图反向投影
4.6 小结

第二部分 进阶篇
第5章 卷积操作
5.1 卷积概念
5.2 卷积模糊
5.3 自定义滤波
5.4 梯度提取
5.5 边缘发现
5.6 噪声与去噪声
5.7 边缘保留滤波
5.8 锐化增强
5.9 小结

第6章 二值图像
6.1 图像阈值化操作
6.2 全局阈值分割
6.3 自适应阈值分割
6.4 去噪与二值化
6.5 小结

第7章 二值分析
7.1 二值图像分析概述
7.2 连通组件扫描
7.3 轮廓发现
7.4 轮廓测量
7.5 拟合与逼近
7.6 轮廓分析
7.7 直线检测
7.8 圆检测
7.9 最大内接圆与最小外接圆
7.10 轮廓匹配
7.11 最大轮廓与关键点编码
7.12 凸包检测
7.13 小结

第8章 形态学分析
8.1 图像形态学概述
8.2 腐蚀与膨胀
8.3 开闭操作
8.4 形态学梯度
8.5 顶帽与黑帽
8.6 击中击不中
8.7 结构元素
8.8 距离变换
8.9 分水岭变换
8.10 小结

第9章 特征提取
9.1 图像金字塔
      9.1.1 高斯金字塔
      9.1.2拉普拉斯金字塔
      9.1.3 金字塔融合
9.2 Harris角点检测
9.3 shi-tomas角点检测
9.4 亚像素级别角点检测
9.5 HOG特征与使用
      9.5.1. HOG特征描述
      9.5.2 基于HOG特征的行人检测
9.6 ORB特征描述子
      9.6.1. 关键点与描述子提取
      9.6.2 描述子匹配
9.7 基于特征的对象检测
      9.7.1. 单应性变换
      9.7.2 对象检测
9.8 小结

第10章  视频分析
10.1 基于颜色的对象跟踪
10.2 视频背景分析
10.3 帧差法背景析
10.4 稀疏光流分析
10.5 稠密光流分析
10.6 均值迁移分析
10.7 小结

第11章 机器学习
11.1 KMeans
      11.1.1 KMeans图像分割
      11.1.2 KMeans 提取图像色卡
11.2 KNN分类
11.3 SVM分类
11.4 HOG+SVM自定义对象检测
11.5 小结

第三部分 高级与实战
第12章 深度神经网络
12.1 DNN概述
12.2 图像分类
12.3 对象检测
      12.3.1 SSD对象检测
      12.3.2 Faster-RCNN对象检测
      12.3.3 YOLO对象检测
12.4 ENet图像分割
12.5 风格迁移
12.6 场景文字检测
12.7 人脸检测
12.8 小结

第13章YOLOv5自定义对象检测
13.1 YOLOv5下载与安装
13.2 预训练YOLOv5模型对象检测
13.3 自定义对象检测
      13.3.1 OID数据集下载与制作
      13.3.2 配置文件修改与训练
      13.3.3 部署自定义对象检测模型
13.4小结 

第14章 缺陷检测
14.1 简单背景下的缺陷检测
14.1.1 问题描述
14.1.2 二值分析
14.1.3 缺陷分析
14.2 复杂背景下的缺陷检测
      14.2.1 频率域增强的缺陷检测
      14.2.2 空间域增强的缺陷检测
      14.2.3 小结
14.3 案例-刀片缺陷检测
14.4 基于深度学习的缺陷检测
      14.4.1 基于分类的缺陷检测
      14.4.2 基于UNet的缺陷检测
14.5 小结

第15章 OpenVINO加速支持
15.1 OpenVINO框架安装与环境配置
      15.1.1 OpenVINO安装
      15.1.2 配置C++开发支持
15.2 OpenVINO2022.x版SDK推理演示
      15.2.1 推理SDK介绍
      15.2.2 推理SDK演示
15.3 OpenVINO支持UNet部署
15.4 OpenVINO支持YOLOv5部署
15.5 小结

第16章CUDA加速支持
16.1 OpenCV CUDA版本编译
16.2 CUDA加速传统图像处理
      16.2.1 Mat与UMat的相互转换
      16.2.2 CUDA加速版本的视频背景分析
16.3 CUDA加速OpenCV DNN
16.4 小结

关于新书

《OpenCV应用开发:入门、进阶与工程化实践》全书共计16个章节,重点聚焦OpenCV开发常用模块详解与工程化开发实践,提升OpenCV应用开发能力,助力读者成为OpenCV开发者,同时包含深度学习模型训练与部署加速等知识,帮助OpenCV开发者进一步拓展技能地图,满足工业项目落地所需技能提升。购买请点链接:
《OpenCV应用开发:入门、进阶与工程化实践》文章来源地址https://www.toymoban.com/news/detail-764670.html

到了这里,关于【真情流露】我为什么要写一本OpenCV C++书籍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么要写测试用例,测试用例写给谁看?

    “为什么要编写测试用例,测试用例写给谁看”,这个问题看似简单,但却涵盖了一系列复杂的考虑因素,并不太好回答。 为了向各位学测试的同学们解释清楚“为什么编写测试用例是至关重要的”,我将通过以下5个方面进行展开: 1、为什么要写测试用例? 2、测试用例写

    2024年02月05日
    浏览(40)
  • 我为什么要写《百图解码支付系统设计与实现》专栏(附专栏大纲)

    致谢 @月朦胧 提出的“状态机领域模型同时被两个线程操作怎么避免状态幂等问题” @赵晓军528 @康文彬 指出了状态机文章中有关键代码缺失 @用户4725518259032 指出了需要缺失hashCode()的问题。 很多其他网友也给了很多有益反馈,无法一一感谢。 本周更新 分布式流控系列文章。

    2024年01月16日
    浏览(47)
  • 猿创征文|一名大三学生的前端学习之路(真情流露)

    ✅ 作者简介:一名大三的大学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强!☀️ 🔥前言 ⭐️写下这篇文章其实也是借助官方活动的一次机会,

    2023年04月10日
    浏览(43)
  • 为什么要学习C++

    UINX操作系统诞生之初是用汇编语言编写的。 随着UNIX的发展,汇编语言的开发效率成为一个瓶颈。 寻找新的高效开发语言成为UNIX开发者需要解决的问题。 当时BCPL语言成为了当时的选择之一。 Ken Thomposn对BCPL进行简化得到了B语言。 但是B语言不是直接生成机器码,而是生成中

    2024年02月10日
    浏览(46)
  • 为什么 C 语言没有被 C++ 取代?

    今日话题,为什么 C 语言没有被 C++ 取代?C语言之所以没有被C++完全取代,有几个主要原因。首先,C++的编译器实现相对复杂,这对于一些嵌入式平台来说是一个问题。许多嵌入式系统只支持C语言,因此C++在这些平台上无法使用。即使在支持C++的嵌入式平台上,也常常存在不

    2024年01月19日
    浏览(70)
  • 有了NULL,为什么C++还需要nullptr?

    目录 1.引言 2.类型安全 3.函数重载 4.代码清晰性 5.示例 6.总结 在C++编程中,nullptr是一个类型安全的空指针常量,自C++11起被引入。然而,在此之前,程序员们通常使用NULL或0来表示空指针。那么,为什么有了NULL之后,C++还需要引入nullptr呢?本文将从类型安全、函数重载和代

    2024年02月21日
    浏览(51)
  • 为什么C++这么复杂还不被淘汰?

    C++是一门广泛使用的编程语言,主要用于系统和应用程序的开发。尽管C++具有一些复杂的语法和概念,但它仍然是编程界的重量级选手,在编程语言排行榜中一直位居前列。 为什么C++这么复杂还不被淘汰呢? C++有以下优势 1、C++具有高性能 C++是一门编译型语言,可以直接编

    2024年02月05日
    浏览(51)
  • c++ 移动构造方法为什么要加noexcept

    最近看了候捷老师的c++的教程, 他说移动构造方法要加noexcept,  在vector扩容的时候, 如果有移动构造方法没有加noexcept,是不会调用的. 个人感觉有些神奇, 这就去查下一探究竟. 测试代码如下:  执行结果如下: 我们知道vector 是要扩容的, 在A(A a) 并没有添加noexcept, 所

    2024年02月10日
    浏览(79)
  • C++ vector元素类型为什么不能是引用

    vectorT 引用必须要进行初始化,不能初始化为空对象,初始化后不能改变指向 引用是别名,不是对象,没有实际地址, 不能定义引用的指针 ,也 不能定义引用的引用 推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家: 零声白金学习卡(含基础架构/高性能存储

    2024年02月15日
    浏览(59)
  • 【C++入门】你知道C++为什么会有内联函数吗?

    👦个人主页:@Weraphael ✍🏻作者简介:目前学习C++和算法 ✈️专栏:C++航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨ 本章是补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。 我

    2024年02月03日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包