- 博客(52)
- 资源 (22)
- 收藏
- 关注
原创 算法与时间复杂度
通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 算法执...
2019-04-30 16:50:01 623
原创 【Python】函数式编程
前言函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。我们首先要搞明白计算机(Comput...
2019-04-24 14:29:46 134
原创 Qt多线程通信
前言1 Qt线程间共享数据主要有两种方式:1)使用共享内存。即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的。2)使用singal/slot机制,把数据从一个线程传递到另外一个线程。第一种方法在各个编程语言都普遍使用,而第二种方法是QT的特有的,本文主要介绍第二种。2 槽参数类型1) 在线程间使用信号槽进行...
2019-04-23 15:34:28 932
转载 Linux内核设计与实现
《Linux内核设计与实现》读书笔记 目录:《Linux内核设计与实现》读书笔记(一)-内核简介 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备 《Linux内核设计与实现》读书笔记(三)- Linux的进程 《Linux内核设计与实现》读书笔记(四)- 进程的调度 《Linux内核设计与实现》读书笔记(五)- 系统调用 《Linux内核设计与实现》读书笔记(六)...
2019-04-23 14:40:13 1332
原创 C++调用matlab接口
实验平台:matlab R2016b VS2013思路:1. 设置matlab的编译器,使用外部的VC或者gcc等编译器。2. 编译m文件成dll3. 设置VS的Include路径和lib链接库的路径4. 编写C++调用dll步骤:1.设置matlab的编译器在命令行窗口下,输入并执行如下命令:mex –setup在出现的编译器中,选择VS201...
2019-04-22 17:25:22 1462
原创 浅谈C/C+内存管理、内存泄漏、堆栈
1.内存分配区间: 对于一个C语言程序而言,内存空间主要由五个部分组成:代码段(.text)、数据段(.data)、静态区(.BSS)、堆和栈组成。 BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量(这里注意一个问题:一般的书上都会说全局变量和静态变量是会自动初始化的,那么哪来的未初始化的变量呢?变量的初始化可以分...
2019-04-18 17:39:00 241
原创 C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
前言所谓的内存泄漏就是用动态变量机制new了一段内存空间,以后不再需要这个变量的时候没有delete它,或者在没有delete之前,指针又指向了另外一个地址,这样先前的空间就丢失了。内存泄漏最典型的情况就是在函数中申请了一段动态空间,在函数返回前就没有delete它,造成内存泄漏。此外对new操作的失败检查也是一个良好的编程习惯,虽然一般很少遇到,但是这种内存分配的失败不是不会发生...
2019-04-18 15:00:45 1573
转载 三维重建:三维重建技术概述
基于视觉的三维重建,指的是通过摄像机获取场景物体的数据图像,并对此图像进行分析处理,再结合计算机视觉知识推导出现实环境中物体的三维信息。1. 相关概念(1)彩色图像与深度图像彩色图像也叫作RGB图像,R、G、B三个分量对应于红、绿、蓝三个通道的颜色,它们的叠加组成了图像像素的不同灰度级。RGB颜色空间是构成多彩现实世界的基础。深度图像又被称为距离图像,与灰度图像中像素点存储亮度值不同,...
2019-04-10 13:58:06 2255 1
转载 三维重建:三维重建基础
前言 三维重建技术通过深度数据获取、预处理、点云配准与融合、生成表面等过程,把真实场景刻画成符合计算机逻辑表达的数学模型。这种模型可以对如文物保护、游戏开发、建筑设计、临床医学等研究起到辅助的作用。1.1 研究背景及意义人类通过双眼来探索与发现世界。人类接收外部信息的方式中,有不到三成来自于听觉、触觉、嗅觉等感受器官,而超过七成、最丰富、最复杂的信息则通过视觉[1]进行感知...
2019-04-10 13:55:24 3350 4
原创 CUDA编程:与OpenCV结合
前言 学习计算机图像处理算法的童鞋,就不得不学习cuda,为啥呢?因为图像处理一般都是矩阵运算,动不动就是百万的计算量这个时候优化计算时间是必不可少的。openCV本身提供了很多cuda函数,能够满足大多数用户的需求。但是也不绝对,有时候我们需要自己定义一个内核函数进行优化,当然你也可以用openGL或者多线程,openCV也提供较好的支持,掌握一种或多种加速算法,对程序员特别是算...
2019-04-10 11:07:51 3456 3
原创 详解float**类型和float*类型
先上图:直接将num[0][0]的地址赋给pt只能得到最后一维的值,原因是num的之前维度的值存贮是不连续的,所以无法得到其他维度的值,只能通过下面的方式,在每个维度进行地址赋值。如下:除此之外,可以另行开辟空间,将num[i][j]的值存储到pt[i]中。例如:...
2019-04-09 20:10:30 6540 2
转载 高性能加速深度学习算法
1.深度学习深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习典型应用为图像识别和语音识别。(由于本人不是深度学习专业人士,对深度学习理论知识不多介绍,说多了就班门弄斧了,后面主要介绍下这些深度学习算法如何进行并行化设计和优化)2.CPU+GPU异构...
2019-04-09 20:08:21 824
转载 CUDA 多GPU调用实现
当设备存在多块GPU时,为了高效利用GPU,我们常常需要使用多卡计算。本例中我们使用OpenMP来进行多线程调用多GPU运行,初学者无须详细了解OpenMP,只需知道一两句命令就行。详细步骤如下:1、建立一个普通CUDA项目:2、在项目属性C/C++设置语言:支持openMP3、在CUDA C/C++中设置预编译命令:-Xcompiler "/openmp"(这一行很重要)...
2019-04-09 19:50:21 3698 1
原创 Qt调用CUDA动态库及配置
本文配置环境:Win7(x64)+VS2012+CUDA+Qt5.5.01、首先保证CUDA集成到VS下(如下图顺利安装Nsight for VS2012)。CUDA安装比较简单,选自定义安装,然后一直next 就可以了。2、CUDA动态库的封装参考以前的博客:https://blog.csdn.net/Aidam_Bo/article/details/89159081封装成功后生成D...
2019-04-09 19:41:09 2995
原创 Qt 调用CUDA静态库和动态库生成与配置
前言 通过将CUDA相关计算操作放在库中,方便在项目中调用,省去了每次编译cu文件的麻烦,也便于集成到其他平台上。 关于部署CUDA加速的程序时,往往对CUDA加速的程序编译为动态链接库或者静态链接库。这两者导致的区别是,使用动态链接库,在目标机器上运行时,必须一并安装和编译库时一样的CUDA版本,而静态库没有这样的要求。可见静态库对使用者来说可能更加方便。...
2019-04-09 19:37:08 3152
原创 CUDA中二级指针表示二级数组
首先看下我们在CPU上是如何用二级指针表示二维数组的,其实就两点:一是用一级指针保存数据,二是用二级指针去按行索引数据位置。关于一级指针和二级指针的内存分配这里不讲了,注意数据类型就可以了。代码做了相关说明,应该比较好理解:#define Row 8#define Col 4//声明Row个行指针: cpuA cpuA+0 cpuA+1 cpuA+Row int **...
2019-04-09 19:13:42 1530 1
原创 CUDA精进之路(五):图像处理——OTSU二值算法(最大类间方差法、大津法)
引言最近在做医疗设备相关的项目,故在项目中大量用到了各类图像分割的算法,为了在图像中分割出特定目标,用到的算法可以有很多,比如阈值分割,多通道分割,边缘分割以及一些前沿的组合分割。而对大多数图像来说,分割的一大难点是将待识别的目标与背景分离,其中一种有效简单的方法就是二值化(并不都有效),本博客试着将二值化算法中的OTSU算法进行cuda改写。任务要求输入一张8bit的灰度图,通过...
2019-04-09 14:29:59 2148
原创 CUDA精进之路(四):图像处理——Sobel算子边缘检测
引言关于图像边缘检测,记得刚开始接触图像处理时,第一个自己实现的程序是通过笔记本摄像头采集图像,利用OpenCV自带的算法库进行Canny算子边缘检测,那时候当看到程序运行后,视频窗口实时显示经Canny算子边缘分割后的图像,觉得十分有科技感,后来慢慢开始自己写边缘检测的源代码,本博客以Sobel算子为例,将边缘检测通过CUDA实现。任务要求输入一张图片,将其转为灰度图后,通过CU...
2019-04-09 14:24:36 2437 5
原创 CUDA精进之路(三):图像处理——图像灰度化、灰度直方图统计
引言在大部分的图像处理程序中,其中必不可少的一步就是对传入的彩图进行灰度处理,将三个通道的RGB图片转化为单通道的Gray图,而对于灰度图进行直方图统计同样是观察检测图像特征的常用方法。在OpenCV中已经有成熟的封装函数进行上述功能的实现,本文主要讲述CUDA实现,加快对大图像的处理速度。任务要求输入一张彩色图片,通过CUDA将其转换为灰度图,并对灰度图进行灰度直方图统计。实...
2019-04-09 14:15:14 2525 1
原创 CUDA精进之路(一):图像处理——大图像分块处理(包括求均值、最大值)
引言在我的第一篇文章中我简单介绍了CUDA以及我的一些个人学习见解,在本文中我将开始正式开始CUDA实践之旅,众做周知CUDA目前应用的领域十分广泛,它能把一些普通的CPU代码提速几十倍甚至几百倍。在本人所从事的图像处理领域,在一些大图像的处理上(4K以上图像),仅仅依靠CPU进行计算已经完全无法满足工程项目所要求的运行时间,这时候我们就需要利用CUDA对代码进行加速。本文以一个8000*1...
2019-04-09 14:10:42 9993 10
原创 CUDA精进之路(二):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
引言从这篇文章起,开始将一些较为典型的OpenCV算法通过CUDA进行实现,本文实现的为图像处理中最为常见的形态学腐蚀以及膨胀,由于本文目的在于算法移植后的验证,故在图片的选择上用小图像作为输入的示例图像,有不当之处欢迎评论或私信~任务要求输入一张图片,将其转为灰度图后,通过CUDA在GPU中对图片实现形态学腐蚀、膨胀操作,最后将结果输出至CPU并进行显示,要求输出图与用OpenC...
2019-04-09 14:02:10 1819 3
原创 CUDA精进之路(零):CUDA开篇
前言 着手机器视觉项目时接触到了并行编程这一概念,那时候的目的是为了在图像识别的时候通过多个线程同时对多张传入的图片进行并行处理以达到加速程序运行速度,运用的方法主要是利用了C++自带的future库以及thread库,具体实现方法可参照此博客C++11 并发指南四此方法简单来说是利用了目前计算机为多核式结构(四核),因为在一般的串行编程中,一个程序的指令在单一的 ...
2019-04-09 13:54:46 716
转载 OpenCV精进之路(二十三):实例——Bag of Features(BoF)图像分类实践
在深度学习在图像识别任务上大放异彩之前,词袋模型Bag of Features一直是各类比赛的首选方法。首先我们先来回顾一下PASCAL VOC竞赛历年来的最好成绩来介绍物体分类算法的发展。从上表我们可以发现,在2012年之前,词袋模型是VOC竞赛分类算法的基本框架,几乎所有算法都是基于词袋模型的,可以这么说,词袋模型在图像分类中统治了很多年。虽然现在深度学习在图像识别任务中的效果更胜一筹...
2019-04-09 10:34:56 928 1
转载 OpenCV精进之路(二十二):实例——皮肤检测技术
好久没写博客了,因为最近都忙着赶项目和打比赛==| 好吧,今天我打算写一篇关于使用opencv做皮肤检测的技术总结。那首先列一些现在主流的皮肤检测的方法都有哪些:RGB color space Ycrcb之cr分量+otsu阈值化 YCrCb中133<=Cr<=173 77<=Cb<=127 HSV中 7<H<20 28<S<256 50&...
2019-04-09 10:27:35 755
原创 OpenCV精进之路(二十一):实例——去除发票上的印章
最近在做票据识别的编码工作时遇到一些问题,就是票据上往往会有一些红色印章把一些重要信息区域给覆盖了,比如一些开发票人员盖印章时比较随意,容易吧一些关键区域给遮蔽了,这让接下来的票据识别很困难,因此,我们必须先对票据图像进行一定的预处理来移除印章干扰,再进行字符识别,这样子识别准确率才有保证。我们从简单例子说起,比如我们有以下一张票据,上面盖有红色印章,虽然该印章没有遮挡关键信息,但是我们还是打...
2019-04-09 10:25:06 1591
原创 OpenCV精进之路(二十):工具——图像标注小工具
搞图像深度学习的童鞋一定碰过图像数据标注的东西,当我们训练网络时需要训练集数据,但在网上又没有找到自己想要的数据集,这时候就考虑自己制作自己的数据集了,这时就需要对图像进行标注。图像标注是件很枯燥又很费人力物力的一件事情,但是又不能回避,毕竟搞深度学习如果没有数据集那一切都是瞎搞。最近我在参加一个有关图像深度学习的比赛,因为命题方没有给出训练集,所以需要队伍自己去标注训练集,所以我花点时间开发了一...
2019-04-09 10:22:08 1336
原创 OpenCV精进之路(十六):图像分解和融合技术——图像拼接和图像融合技术
图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。再举一个身边的例子吧,你用你的手机对某一场景拍照,但是你没有办法一次将所有你要拍的景物全部拍下来,所以你对该场景从左往右依次拍了好几张图,来把你要拍的所有景物记录下来。那么我们能不能把这些图像拼接成一个大图呢?我们利用opencv...
2019-04-09 10:19:13 1289 1
原创 OpenCV精进之路(十五):特征检测和特征匹配方法汇总
一幅图像中总存在着其独特的像素点,这些点我们可以认为就是这幅图像的特征,成为特征点。计算机视觉领域中的很重要的图像特征匹配就是一特征点为基础而进行的,所以,如何定义和找出一幅图像中的特征点就非常重要。这篇文章我总结了视觉领域最常用的几种特征点以及特征匹配的方法。在计算机视觉领域,兴趣点(也称关键点或特征点)的概念已经得到了广泛的应用, 包括目标识别、 图像配准、 视觉跟踪、 三维重建等。 这个...
2019-04-09 10:09:10 476
原创 OpenCV精进之路(十九):工具——程序打包发布
我们经常遇到这样的需求:我们在VS写好的程序,需要在一个没有装opencv甚至没有装vs的电脑下运行,跑出效果。比如,你在你的电脑用opencv+vs2015写出一个程序,然后老师叫你把程序发给他,他要看看功能实现的怎么样。老师的电脑肯定没有整套的开发环境的,如果你想只把代码发给他,让他自己编译,肯定会出现问题。所以,我们需要掌握如何生成一个不依赖开发环境的exe的方法。下面将以一个实际例子说...
2019-04-09 10:05:22 2884 1
原创 OpenCV精进之路(十八):工具——“全能扫描王“扫描软件
相信很多人手机里都装了个“扫描全能王”APP,平时可以用它来可以扫描一些证件、文本,确实很好用,第一次用的时候确实感觉功能很强大啊算法很牛逼啊。但是仔细一想,其实这些实现起来也是很简单的,我想了下,实现的步骤应该就只有下面三个:将证件轮廓找到 提取证件矩形轮廓四点进行透视变换 二值化知道原理之后,我马上利用强大的opencv开发一个类似“全能扫描王”扫描工具。整理一下我们要制作的这个...
2019-04-09 09:49:23 1528 2
原创 OpenCV精进之路(十七):工具——图像配准工具
近日在做基于sift特征点的图像配准时遇到匹配失败的情况,失败的原因在于两幅图像分辨率相差有点大,而且这两幅图是不同时间段的同一场景的图片,所以基于sift点的匹配已经找不到匹配点了。然后老师叫我尝试手动选择控制点来支持仿射变换。很可惜opencv里没有这类似的库,查了下资料,看看有没有现成的手动配准软件,找到了arcgis这款软件可以做手动配准,不过这软件也都太大了吧我要的只是一个简单的功能...
2019-04-08 17:42:55 1165 1
原创 OpenCV精进之路(零):HighGUI——读写XML和YML文件
前言有时候我们处理完图像后需要保存一下数据到文件上,以供下一步的处理。一个比较广泛的需求场景就是:我们对一幅图像进行特征提取之后,需要把特征点信息保存到文件上,以供后面的机器学习分类操作。那么如果遇到这样的场景,我们有什么好方法,搭建这类的小型数据库文件?我第一时间想到的是把这些数据全写到文件上,下次我们需要这些数据就把他们从文件里读出来就好了。其实更好的办法是使用xml和yml,因为他们...
2019-04-08 17:40:44 362
原创 OpenCV探索之路(零):HighGUI——使用imwrite调整保存的图片质量
近日在用opencv做一些图像处理的操作时,需要对一些高分辨率的图像进行保存。比如,在操作一个容量为230M的图像后,并对该图像保存为JPG格式后,发现图像容量变为80M了!针对这个问题,忙了大半天,到处翻阅资料,终于知道为什么了。先举个例子说明自己遇到的问题,为了看出效果,我特意用了一个高分辨率的图片做实验。比如我有如下的一个233M的图片经过下面的程序读进内存,再次保存后,图片容量...
2019-04-08 17:37:58 630
原创 OpenCV精进之路(零):core组件——Mat和IplImage访问像素的方法总结
在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作,访问元素就是各种图像处理算法的第一步。首先先看看图像的是怎么存储的。单通道图像多通道图像Mat访问图像元素方法汇总1.用指针访问元素在大多数图像处理任务中, 执行计算时你...
2019-04-08 17:36:08 298
原创 OpenCV精进之路(十四):图像矫正技术深入探讨
刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正。哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧!那什么是图像的矫正呢?举个例子就好明白了。我的好朋友小明给我拍了这几张照片,因为他的拍照技术不咋地,照片都拍得歪歪扭扭的,比如下面这些照片:人民币发票文本这些图片让人看得真不舒服!看个图片还要歪脖子看,实在是太烦人了!我叫小明帮我扫描一下一本教科书,...
2019-04-08 17:34:16 2614 4
原创 OpenCV精进之路(十三):角点检测
角点检测是计算机视觉系统中用来获取图像特征的一种方法。我们都常说,这幅图像很有特点,但是一问他到底有哪些特点,或者这幅图有哪些特征可以让你一下子就识别出该物体,你可能就说不出来了。其实说图像的特征,你可以尝试说一下这幅图有几个矩形啊几个圆形啊,有几条直线啊,当然啦,你也可以说一下有几个角点。什么是角点?角点通常被定义为两条边的交点。比如,三角形有三个角,矩形有四个角,这些就是角点,也是他们...
2019-04-08 17:31:44 352
原创 OpenCV精进之路(零):core组件——绘制点、直线、几何图形
绘制点和圆void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int line_type=8, int shift=0 );img:图像。 center:圆心坐标。 radius:圆形的半径。 color:线条的颜色。 thic...
2019-04-08 17:30:08 318
原创 OpenCV精进之路(十二):详解掩膜mask
在OpenCV中我们经常会遇到一个名字:Mask(掩膜)。很多函数都使用到它,那么这个Mask到底什么呢?一开始我接触到Mask这个东西时,我还真是一头雾水啊,也对无法理解Mask到底有什么用。经过查阅大量资料后,也对Mask有一点自己的理解了,下面就说说我的理解。比如我要对一幅图进行抠图操作,这就要用到Mask了,那我就以抠图为例,解释Mask在里面的作用。先上程序,再一句一句剖析。...
2019-04-08 17:27:47 537
caffe安装配置文件Makefile.config
2020-10-19
PCA算法的原理C++ Eigen库实现
2020-04-16
C++PrimerPlus(第6版)_高清中文版_超详带书签
2019-04-23
OpenCV3编程入门_毛星云版
2019-04-08
QTTest(主要关于TCP和UDP传输)
2019-01-18
QPaintEvent绘制雷达扫描图
2018-12-26
OSG学习资料及视频PPT超详
2018-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人