【真情流露】我为什么要写一本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在一线从事机器视觉跟生物医学分析的开发者站出来。

写作过程与反馈

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

新书已经成功荣登热销榜单第一
在这里插入图片描述

新书已经成功荣登热销榜单第一
在这里插入图片描述

本书目录

第一部分 基础篇
第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应用开发:入门、进阶与工程化实践》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/254364.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

借助图形控件Aspose.Tasks,在 C# 中将 XER 转换为 SVG

Primavera P6 是一款流行的项目管理软件,它使用XER 文件格式来存储项目数据。 SVG(即可缩放矢量图形)是一种流行的矢量图像格式,可用于为 Web 和打印应用程序创建可缩放图形。在某些情况下,我们可能需要以编程方式将 P…

深度学习笔记_6经典预训练网络LeNet-18解决FashionMNIST数据集

1、 调用模型库,定义参数,做数据预处理 import numpy as np import torch from torchvision.datasets import FashionMNIST import torchvision.transforms as transforms from torch.utils.data import DataLoader import torch.nn.functional as F im…

算法模板之双链表图文详解

🌈个人主页:聆风吟 🔥系列专栏:算法模板、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️使用数组模拟双链表讲解1.1 🔔为什么我们要使用数组去模拟双链表…

全国巡展“2024人工智能展·世亚智博会”3月上海·4月杭州·6月北京

近年来,我国积极布局人工智能产业,竞跑“未来赛道”。随着各行业、各领域对人工智能需求的日益增长,与实体经济深度融合的新模式不断涌现,形成了具有中国特色的研发体系和应用生态,引领着经济社会各领域从数字化、网络…

YOLOv3-YOLOv8的一些总结

0 写在前面 这个文档主要总结YOLO系列的创新点,以YOLOv3为baseline。参考(抄)了不少博客,就自己看看吧。有些模型的trick不感兴趣就没写进来,核心的都写了。 YOLO系列的网络都由四个部分组成:Input、Backbone、Neck、Prediction…

高新技术企业工时管理的挑战与应对策略

随着科技的飞速发展,高新技术企业已成为推动社会进步的重要力量。而在这类企业中,工时管理作为企业管理的重要组成部分,其意义也日益凸显。有效的工时管理不仅关乎企业的项目进度、人力掌控和资源合理配置,还直接影响到企业的研发…

centos7服务器上的文件上传到谷歌云盘(google drive)

1,下载gdrive客户端,Releases glotlabs/gdrive GitHub 2,下载完解压,并移动到cp gdrive /usr/local/bin/ 3,查看是否安装成功 4,添加账户,gdrive account add 根据链接,创建Client id和 Client secret 5,填写Client…

spring boot 配置多数据源 踩坑 BindingException: Invalid bound statement (not found)

在上一篇:《【已解决】Spring Boot多数据源的时候,mybatis报错提示:Invalid bound statement (not found)》 凯哥(凯哥Java) 已经接受了,在Spring Boot配置多数据源时候,因为自己马虎,导致的一个坑。下面&a…

SEO专业人士成功所需的8大技能

你有能力在SEO领域建立职业生涯吗?您需要某些技能才能成功。在这里了解这些技能是什么。 尽管SEO已经存在了几十年,但许多大学仍然没有教授SEO,也没有在大多数营销课程中提及。 SEO专业人士来自不同的背景。有些是程序员,有些是…

IDA PRO 0A - 交叉引用

本文将讨论IDA中的交叉引用的相关知识。 更多c逆向知识可以看B站的课程《C 反汇编基础教程(IDA Pro Visual Studio)》 交叉引用 IDA 中的交叉引用通常简称为xref 。从名字可以看出,使用快捷键就可以找出某个函数或者数据被引用的地方。 在IDA 中有两类基本的交叉引…

NSSCTF第16页(3)

[SWPUCTF 2023 秋季新生赛]ez_talk 上传一句话木马得到 抓包改文件类型 上传成功,只是倒序而已 得到flag [第五空间 2021]PNG图片转换器 这道题采用的是ruby语言,第一次听说 2021-第五空间智能安全大赛-PNG图片转换器 | 管道符与反引号的配合、open…

使用python实现链表

手写代码 class Node(object):def __init__(self, item):self.item itemself.next Noneclass LinkListFunction(object):"""此对象为Node对象的方法类"""def __init__(self):self.linklistlength 0 # 当前链表的长度def create_linklist_he…

C语言学习第二十六天(算法的时间复杂度和空间复杂度)

1、算法效率 衡量一个算法的好坏,是从时间和空间两个方面来衡量的,换句话说就是从时间复杂度和空间复杂度来衡量的 这里需要补充一点:时间复杂度是衡量一个算法的运行快慢,空间复杂度是主要衡量一个算法运行所需要的额外空间。 …

「Verilog学习笔记」交通灯

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule triffic_light(input rst_n, //异位复位信号,低电平有效input clk, //时钟信号input pass_request,output wire[7:0]clock,output reg…

Shared Worker的快速理解与简单应用

SharedWorker 是 HTML5 中引入的一种 WebWorkers 类型,用于在浏览器中创建可在多个浏览器窗口或标签页之间共享的后台线程。Web Workers 是在主线程之外运行的脚本,允许执行一些耗时的任务而不会阻塞用户界面。 对 SharedWorker 的概念、理解和应用的简要…

2023第十七届中国品牌节,酷开科技荣获金谱奖!

11月18日,以“复苏与腾飞”为主题的2023第十七届中国品牌节,在杭州市云栖小镇国际会展中心盛大开幕。来自政界、商界、文化界等领域的6000余名嘉宾出席本次盛会,共同见证了民族品牌的崛起,全力奉献一场史无前例的“品牌人的亚运会…

Pikachu漏洞练习平台之暴力破解(基于burpsuite)

从来没有哪个时代的黑客像今天一样热衷于猜解密码 ---奥斯特洛夫斯基 Burte Force(暴力破解)概述 “暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认…

【操作系统】实验名称: 实验五 文件系统

实验目的: 1. 掌握文件系统的基本概念和工作机制 2. 掌握文件系统的主要数据结构的实现 3、掌握软件系统实现算法 实验内容: 设计并实现一个虚拟的一级(单用户)文件系统程序 提供以下操作 1、文件创建/删除接口命令 2、目录创建/删…

合并 K 个排序链表——Java解答

题目:合并 K 个排序链表 题目描述: 给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例: 假设有以下三个链表: 1->4->5, 1->3->4,…

QUIC在零信任解决方案的落地实践

一 前言 ZTNA为以“网络为中心”的传统企业体系架构向以“身份为中心”的新型企业安全体系架构转变,提供解决方案。随着传统网络边界不断弱化,企业SaaS规模化日益增多,给终端安全访问接入创造了多元化的空间。其中BYOD办公方式尤为突出&#…