| 作者 |
| [美] 包米克·维迪雅(Bhaumik Vaidya) [伊朗]阿敏·艾哈迈迪·泰兹坎迪(Amin Ahmadi Tazehkandi) |
| 丛书名 |
| 智能系统与技术丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782005189252 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------基于GPU加速的计算机视觉编程:使用OpenCV和CUDA实时处理复杂图像数据--------------------------- 本书提供了OpenCV与CUDA集成以实现实际应用的详细概述。首先介绍使用CUDA进行GPU编程的基础知识。然后,通过一些实际的例子讲解如何利用GPU和CUDA实现OpenCV加速。一旦掌握了核心概念,读者将熟悉如何在NVIDIA Jetson TX1上部署OpenCV应用程序,该应用程序在计算机视觉和深度学习应用程序中非常流行。本书的最后几章解释了PyCUDA,这是一个Python库,它利用CUDA和GPU的强大功能来加速。在本书的最后,读者将通过本书的实践方法增强计算机视觉应用程序。 ---------------------------OpenCV 3和Qt5计算机视觉应用开发--------------------------- 全书共分为12章,全面系统地讲述了OpenCV3和Qt5的核心内容,包括:OpenCV和Qt介绍、创建OpenCV和Qt项目、Mat和QImage、图形视图框架、OpenCV中的图像处理、特征与描述符、多线程、视频分析、视频稳定性、调试与测试、链接与部署、Qt Quick应用程序等。为了便于学习与实践,本书提供了示例算法的编码实现。也向读者全面详尽地介绍了基于OpenCV和Qt进行图像处理、计算机视觉等编程的技术和方法。 |
| 目录 |
---------------------------基于GPU加速的计算机视觉编程:使用OpenCV和CUDA实时处理复杂图像数据--------------------------- 前言 作者简介 审稿人简介 第1章 CUDA介绍及入门 1 1.1 技术要求 1 1.2 CUDA介绍 1 1.2.1 并行处理 2 1.2.2 GPU架构和CUDA介绍 2 1.2.3 CUDA架构 3 1.3 CUDA应用程序 4 1.4 CUDA开发环境 5 1.4.1 支持CUDA的GPU 5 1.4.2 CUDA开发工具包 6 1.5 在所有操作系统上安装CUDA工具包 6 1.5.1 Windows 6 1.5.2 Linux 7 1.5.3 Mac 8 1.6 一个基本的CUDA C程序 9 1.6.1 在Windows上创建CUDA C程序的步骤 10 1.6.2 在Ubuntu上创建CUDA C程序的步骤 10 1.7 总结 11 1.8 测验题 11 第2章 使用CUDA C进行并行编程 12 2.1 技术要求 12 2.2 CUDA程序结构 13 2.2.1 CUDA C中的双变量加法程序 13 2.2.2 内核调用 14 2.2.3 配置内核参数 15 2.2.4 CUDA API函数 16 2.2.5 将参数传递给CUDA函数 17 2.3 在设备上执行线程 19 2.4 在CUDA程序中获取GPU设备属性 20 2.4.1 通用设备信息 21 2.4.2 内存相关属性 22 2.4.3 线程相关属性 22 2.5 CUDA中的向量运算 24 2.5.1 两个向量加法程序 24 2.5.2 对比CPU代码和GPU代码的延迟 27 2.5.3 对向量的每个元素进行平方 28 2.6 并行通信模式 29 2.6.1 映射 29 2.6.2 收集 29 2.6.3 分散式 30 2.6.4 蒙板 30 2.6.5 转置 30 2.7 总结 30 2.8 测验题 31 第3章 线程、同步和存储器 32 3.1 技术要求 32 3.2 线程 33 3.3 存储器架构 36 3.3.1 全局内存 37 3.3.2 本地内存和寄存器堆 38 3.3.3 高速缓冲存储器 39 3.4 线程同步 39 3.4.1 共享内存 39 3.4.2 原子操作 42 3.5 常量内存 46 3.6 纹理内存 48 3.7 向量点乘和矩阵乘法实例 50 3.7.1 向量点乘 50 3.7.2 矩阵乘法 54 3.8 总结 58 3.9 测验题 58 第4章 CUDA中的高级概念 60 4.1 技术要求 60 4.2 测量CUDA程序的性能 61 4.2.1 CUDA事件 61 4.2.2 NVIDIA Visual Profiler 63 4.3 CUDA中的错误处理 64 4.3.1 从代码中进行错误处理 65 4.3.2 调试工具 66 4.4 CUDA程序性能的提升 66 4.4.1 使用适当的块数量和线程数量 66 4.4.2 最大化数学运算效率 67 4.4.3 使用合并的或跨步式的访存 67 4.4.4 避免warp内分支 67 4.4.5 使用锁定页面的内存 68 4.5 CUDA流 69 4.6 使用CUDA加速排序算法 73 4.7 利用CUDA进行图像处理 75 4.8 总结 80 4.9 测验题 81 第5章 支持CUDA的OpenCV入门 82 5.1 技术要求 82 5.2 图像处理和计算机视觉简介 83 5.3 OpenCV简介 83 5.4 安装支持CUDA的OpenCV 84 5.4.1 在Windows上安装OpenCV 84 5.4.2 在Linux上安装OpenCV 89 5.5 使用OpenCV处理图像 92 5.5.1 OpenCV中的图像表示 92 5.5.2 图像的读取和显示 93 5.5.3 使用OpenCV创建图像 96 5.5.4 将图像保存到文件 99 5.6 使用OpenCV处理视频 99 5.6.1 处理存储在计算机上的视频 100 5.6.2 处理从网络摄像机读取的视频 101 5.6.3 将视频保存到磁盘 102 5.7 使用OpenCV CUDA模块的基本计算机视觉应用程序 104 5.7.1 OpenCV CUDA模块简介 104 5.7.2 对图像的算术和逻辑运算 104 5.7.3 更改图像的颜色空间 108 5.7.4 图像阈值处理 109 5.8 OpenCV应用程序使用和不使用CUDA支持的性能比较 110 5.9 总结 113 5.10 测验题 114 第6章 使用OpenCV和CUDA进行基本的计算机视觉操作 115 6.1 技术要求 115 6.2 访问图像的各个像素强度 116 6.3 OpenCV中直方图的计算和均衡 117 6.4 图像的几何变换 120 6.4.1 图像大小调整 120 6.4.2 图像平移与旋转 121 6.5 对图像进行滤波操作 122 6.5.1 对图像的卷积运算 122 6.5.2 对图像进行低通滤波操作 123 6.5.3 对图像进行高通滤波操作 128 6.6 图像的形态学操作 131 6.7 总结 134 6.8 测验题 134 第7章 使用OpenCV和CUDA进行对象检测和跟踪 135 7.1 技术要求 135 7.2 对象检测和跟踪简介 136 7.2.1 对象检测和跟踪的应用 136 7.2.2 对象检测中的挑战 136 7.3 基于颜色的对象检测和跟踪 136 7.4 基于形状的对象检测和跟踪 139 7.4.1 Canny边缘检测 139 7.4.2 使用Hough变换进行直线检测 140 7.4.3 对圆形进行检测 143 7.5 关键点检测器和描述符 144 7.5.1 加速段测试特征功能检测器 144 7.5.2 面向FAST和旋转BRIEF的特征检测 145 7.5.3 加速强特征检测和匹配 147 7.6 使用Haar级联的对象检测 150 7.6.1 使用Haar级联进行人脸检测 151 7.6.2 使用Haar级联进行眼睛检测 153 7.7 使用背景减法进行对象跟踪 155 7.7.1 高斯混合法 155 7.7.2 GMG背景减法 157 7.8 总结 159 7.9 测验题 160 第8章 Jetson TX1开发套件 161 8.1 技术要求 161 8.2 Jetson TX1简介 161 8.2.1 Jetson TX1的重要特性 163 8.2.2 Jetson TX1的应用 163 8.3 在Jetson TX1上安装JetPack 163 8.3.1 安装的基本要求 164 8.3.2 安装的步骤 164 8.4 总结 171 8.5 测验题 171 第9章 在Jetson TX1上部署计算机视觉应用程序 172 9.1 技术要求 172 9.2 Jetson TX1 GPU的设备属性 173 9.3 Jetson TX1上的基本CUDA程序 174 9.4 Jetson TX1上的图像处理 176 9.4.1 编译支持CUDA的OpenCV 176 9.4.2 读取和显示图像 178 9.4.3 图像合成 178 9.4.4 图像阈值处理 180 9.4.5 Jetson TX1上的图像滤波 182 9.5 Jetson TX1的摄像机接口 184 9.6 Jetson TX1上的高级应用程序 185 9.6.1 使用Haar级联进行人脸检测 185 9.6.2 使用Haar级联进行眼睛检测 187 9.6.3 高斯混合背景减法 188 9.7 在Jetson TX1上使用Python和OpenCV实现计算机视觉 191 9.8 总结 192 9.9 测验题 193 第10章 PyCUDA入门 194 10.1 技术要求 194 10.2 Python编程语言简介 194 10.3 PyCUDA模块简介 195 10.4 在Windows上安装PyCUDA 196 10.5 在Ubuntu上安装PyCUDA 199 10.6 总结 201 10.7 测验题 201 第11章 使用PyCUDA 202 11.1 技术要求 202 11.2 编写第一个PyCUDA程序 203 11.3 从PyCUDA程序访问GPU设备属性 204 11.4 在PyCUDA中执行线程和块 206 11.5 PyCUDA中的基本编程概念 206 11.5.1 在PyCUDA中两个数字相加 207 11.5.2 使用driver类简化加法程序 208 11.6 使用CUDA事件测量PyCUDA程序的性能 209 11.6.1 CUDA事件 209 11.6.2 使用大型数组加法测量PyCUDA的性能 210 11.7 PyCUDA中的复杂程序 212 11.7.1 对PyCUDA中的矩阵元素进行平方运算 212 11.7.2 GPU数组点乘 215 11.7.3 矩阵乘法 217 11.8 PyCUDA的高级内核函数 219 11.8.1 PyCUDA的元素级内核函数 219 11.8.2 归约内核函数 220 11.8.3 scan内核函数 221 11.9 总结 222 11.10 测验题 223 第12章 使用PyCUDA的基本计算机视觉应用程序 224 12.1 技术要求 224 12.2 PyCUDA中的直方图计算 224 12.2.1 使用原子操作 225 12.2.2 使用共享内存 227 12.3 使用PyCUDA进行基本的计算机视觉操作 229 12.3.1 PyCUDA中的颜色空间转换 230 12.3.2 在PyCUDA执行图像合成 233 12.3.3 在PyCUDA中使用gpuarray进行图像反转 234 12.4 总结 235 12.5 测验题 235 测验题答案 236 ---------------------------OpenCV 3和Qt5计算机视觉应用开发--------------------------- 译者序 序 前言 评阅者简介 第1章 OpenCV和Qt简介1 1.1 需要什么2 1.2 Qt介绍3 1.2.1 Qt基本模块3 1.2.2 Qt扩展4 1.2.3 附加值模块4 1.2.4 技术预览模块5 1.2.5 Qt支持的平台5 1.2.6 Qt Creator6 1.3 OpenCV介绍7 1.3.1 主模块8 1.3.2 附加模块8 1.4 安装Qt9 1.4.1 Qt安装准备9 1.4.2 在哪里获得Qt10 1.4.3 安装方法11 1.4.4 测试Qt安装14 1.5 安装OpenCV19 1.5.1 为构建OpenCV做准备19 1.5.2 在哪里获得OpenCV19 1.5.3 如何构建20 1.5.4 配置OpenCV安装23 1.5.5 测试OpenCV安装25 1.6 小结27 第2章 创建第一个Qt + OpenCV项目28 2.1 什么是Qt Creator29 2.2 IDE一览30 2.2.1 Qt Creator的模式30 2.2.2 Qt Creator的选项窗口58 2.3 小结61 第3章 创建完整的Qt + OpenCV项目62 3.1 后台63 3.1.1 qmake工具63 3.1.2 元对象编译器(moc)65 3.1.3 用户界面编译器(uic)66 3.2 设计模式67 3.3 Qt资源系统69 3.4 样式化应用程序73 3.4.1 选择器类型74 3.4.2 子控件75 3.4.3 伪状态75 3.4.4 级联75 3.5 多语言支持77 3.6 创建和使用插件81 3.6.1 接口82 3.6.2 插件84 3.6.3 插件加载器和用户88 3.7 创建基础94 3.8 小结96 第4章 Mat和QImage97 4.1 关于Mat类的所有内容98 4.1.1 构造函数、属性与方法100 4.1.2 Mat_类107 4.1.3 Matx107 4.1.4 UMat类108 4.1.5 InputArray、OutputArry、InputOutputArray108 4.2 利用OpenCV读取图像109 4.3 利用OpenCV写入图像110 4.4 OpenCV中的视频读写110 4.5 OpenCV中的HighGUI模块112 4.6 Qt中的图像和视频处理113 4.6.1 QImage类113 4.6.2 QPixmap类116 4.6.3 QImageReader与QImageWriter类119 4.6.4 QPainter类119 4.6.5 Qt中的相机和视频处理124 4.7 小结125 第5章 图形视图框架126 5.1 场景-视图-对象元素架构127 5.2 场景QGraphicsScene130 5.3 对象元素QGraphicsItem134 5.4 视图QGraphicsView142 5.5 小结152 第6章 基于OpenCV的图像处理153 6.1 图像滤波154 6.2 图像变换功能168 6.2.1 几何变换168 6.2.2 其他变换174 6.3 OpenCV绘图180 6.4 模板匹配183 6.5 小结185 第7章 特征及其描述符187 7.1 所有算法的基础—Algorithm类188 7.2 二维特征框架191 7.2.1 检测特征192 7.2.2 提取和匹配描述符204 7.3 如何选择算法211 7.3.1 精度212 7.3.2 速度212 7.3.3 资源利用率213 7.3.4 可用性213 7.4 小结213 第8章 多线程215 8.1 Qt中的多线程216 8.2 利用QThread实现低级多线程217 8.2.1 子类化QThread217 8.2.2 使用moveToThread函数222 8.3 线程同步工具224 8.3.1 互斥锁224 8.3.2 读写锁226 8.3.3 信号量228 8.3.4 等待条件228 8.4 基于QtConcurrent的高级多线程230 8.5 小结235 第9章 视频分析237 9.1 理解直方图238 9.2 理解反投影图像242 9.2.1 直方图比较250 9.2.2 直方图均衡化252 9.3 MeanShift算法和CamShift算法253 9.4 背景/前景检测260 9.5 小结263 第10章 调试与测试265 10.1 Qt Creator调试266 10.2 Qt测试框架271 10.2.1 创建单元测试272 10.2.2 数据驱动的测试276 10.2.3 基准测试278 10.2.4 GUI 测试278 10.2.5 测试用例项目281 10.3 小结283 第11章 链接和部署285 11.1 后台构建过程286 11.1.1 预处理286 11.1.2 编译286 11.1.3 链接287 11.2 构建OpenCV静态库288 11.3 构建Qt静态库289 11.4 部署Qt + OpenCV应用程序295 11.4.1 使用静态链接部署295 11.4.2 使用动态链接部署297 11.4.3 Qt安装程序框架299 11.5 小结302 第12章 Qt Quick应用程序304 12.1 QML介绍305 12.2 QML中的用户交互和脚本310 12.3 Qt Quick Designer的使用312 12.4 Qt Quick应用程序的结构313 12.5 集成C++和QML代码318 12.6 Android和iOS上的Qt和OpenCV应用程序324 12.7 小结326 |