- 博客(57)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 OpenCV之灰度空间变换
OpenCV入门之灰度空间变化本系列博客主要以数字图像处理第三版为算法基础,以OpenCV为工具进行图像处理基础知识的分享。该教材的前两张基础知识这里不详述,有需要的读者自行查阅。本篇博客介绍第三章的前半部分,灰度变换。关于OpenCV的编译在之前的文章中都有介绍,分别介绍了OpenCV在Ubuntu上的编译以及在android上的交叉编译。感兴趣的读者可以自己尝试从源码编译,这样方面自己在O...
2019-12-16 23:08:37 706
原创 初探MNN
初探MNN伴随着大量人工智能项目的落地,业界对端上推理的需求也越来越旺盛。在之前的文章中介绍过OpenCV的DNN模块,目前开源的端上推理引擎除了OpenCV的DNN之外,还有tensorFlow-lite、paddle-lite、NCNN、MNN等多个推理框架。目前端上推理引擎主要支持CPU及端上GPU,主流的的设备是CPU(arm)+GPU(mali qualcomm powerVR),主要...
2019-12-08 19:32:36 1757
原创 手撕OpenCV源码之图像金字塔
图像金字塔图像金字塔式多分辨率处理的一种方法,多分辨率处理理论有效的统一了多个学科的技术,多分辨率处理技术包括来自信号处理的子带编码,来自数字语音识别的正交滤波及金字塔图像处理。如其名称所示,多分辨率理论涉及多个分辨率下的信号(或图像)表示与分析。这种方法的优势很明显,,某种分辨率下无法检测的特性,可以在另外的分辨率下很容易检测。我们观察图像时,看到的通常是由相似纹理和灰度级连成的区域,他们相...
2019-11-16 16:30:22 551
原创 手撕OpenCV源代码之直方图均衡化
直方图均衡化之前的文章中陆续介绍了OpenCV的编译,色彩空间以及滤波器,甚至DNN的简单介绍,挖了不少坑,目前很多都还没有填上,东西很多,也很杂乱。为了方便读者学习,从本文开始,我将从OpenCV的基本的图像处理算法开始,逐步系统的介绍OpenCV的各个模块的功能。本文先从直方图均衡化开始介绍。网上关于OpenCV API使用方法的文章非常多,但是对于背后的算法原理介绍就比较少了,所以在后续的...
2019-03-27 23:53:13 580
转载 VIM: 括号自动补全
参考文献http://lazybios.com/2015/09/automatically-append-closing-characters-in-vim/
2019-03-11 10:04:27 1042
原创 OpenCV源码交叉编译android库
OpenCV源码编译android库之前的文章中介绍过如何源码编译OpenCV库,但是当时编译的是pc的cpu版本,但是在使用中,很多代码最终要运行在手机等便携式设备上,所以本文介绍一下,如何使用OpenCV源码检查编译构建android的opencv库。交叉编译环境构建首先需要下载android NDK,下载地址: https://developer.android.google.cn/n...
2019-03-10 15:34:42 3202 3
原创 Halide 构建
hello halide随着人工智能,VR等领域的发展,我们对于高性能图像处理程序的需求越来越大;当前编程工具开发的高性能图像处理程序牺牲了程序的可读性,模块性,可移植性等;其主要原因是,当前程序将算法描述, 数据存储以及计算糅杂在一起。同时手工编写高性能图像处理程序开发效率较低,难以快速构建大量高性能图像处理代码。在这样的背景下,MIT的研究人员专门为图像处理设计了一种程序语言——Halid...
2019-03-09 19:09:40 1584
原创 OpenCV DNN(二)——Net
OpenCV DNN之Net好久没有更新了,作为2019年的首发,希望2019年会是腾飞的一年,祝愿大家2019一切都很美好,能在公众号收货更多的干货,大家能一起进步,心想事成。上一篇博文最后留下了一个尾巴,是关于Net的setInput和forward,当时分别介绍了,这两个函数的定义。本文暂时不深入介绍这两个函数,从OpenCV DNN的Net类入手,拆解OpenCV中DNN的结构。本文主...
2019-01-01 13:07:19 10989 3
原创 OpenCV4.0 DNN-googleNet
OpenCV4.0 DNN-googleNetOpenCV 4.0最近发布,其中一大亮点便是加入DNN;之前的文章中介绍了OpenCV 4.0的编译,本系列就通过GoogleNet的demo来窥探OpenCV 4.0的DNN。核心函数介绍首先需要准备GoogleNet的prototxt,caffemodel,和synset_words.txt;这个在网上很容易下载到。然后就是需要一张RGB或...
2018-12-09 01:37:17 5995
原创 Ubuntu上制作windows启动盘
Ubuntu制作windows启动盘安装软件Ubuntu上制作windows启动盘较为方便的一种方式是使用woeusb软件。安装命令如下:sudo add-apt-repository ppa:nilarimogard/webupd8sudo apt-get updatesudo apt-get upgradesudo apt-get woeusb安装完成后启动软件,选择windo...
2018-12-08 22:57:58 22564 1
原创 OpenCV之YUV色彩格式总结
YUV色彩格式总结上一篇文章结合OpenCV的源代码介绍了BGR转YUV的方法(YUV444)。本文主要介绍YUV的3种采样,YUV444,YUV422, YUV420,以及后两种格式转BGR的方法,和BGR转YUV系列的方法。本系列介绍的公式都是结合OpenCV根据OpenCV的计算方法提供的。YUV格式的采样方式YUV格式有3中采样方式,分别是YUV444、YUV422、YUV420;其...
2018-12-02 22:18:45 8545 1
原创 OpenCV 之BGR2YUV
YUV系列之BGR2YUV在OpenCV中imgproc模块下的cvtColor API。这个API的主要功能是对图片做色彩空间转换,使用起来很方便,但是背后的转换理论多少有些繁琐,但是也不难。因此今天在这篇文章中对色彩空间转换的理论进行梳理。OpenCV支持的色彩非常丰富,我们会在以后的系列中逐步介绍,这个系列主要介绍YUV色彩空间与RGB或者BGR空间之间的转换,同时借此了解OpenCV中...
2018-11-11 00:11:41 17295 2
原创 编译OpenCV4.0 源码
编译OpenCV 4.0源码之前写过几篇关于OpenCV的博客,都是基于openCV 3.14写的,10月份OpenCV发布了4.0的bate版本,我就切换到4.0版本上来。之后的博客都会是基于4.0版本的。本文主要介绍一下三个方面的内容:OpenCV 4.0的改进编译OpenCV 4.0源码的方法源码编译中遇到的问题及解决方法这三方面的问题都是比较基础的,但是对于新手可能有些复杂。...
2018-11-03 00:22:59 7009 1
原创 配置adb连接手机
检查adb版本adb version命令可以查看adb版本; Android 4.0以上的手机系统要求adb版本大于等于1.0.31.更新版本sudo apt-get updatesudo apt-get install android-tools-adb android-tools-fastboot 以上两条命令用于更新adb版本查看连接的设备sudo lsus...
2018-07-18 21:12:37 579
原创 OpenCL中的向量数据类型转换
OpenCL中的向量数据类型转换1.函数原型convert_destType(sourceType)destType convert_destType<_sat><roundingMode>(sourceType)destTypen convert_destTypen<_sat&amp
2018-06-20 20:58:14 3699
原创 手撕OpenCV源码之GaussianBlur
手撕OpenCV源码之GaussianBlurGaussianBlur API解析首先看源码: void cv::GaussianBlur( InputArray _src, OutputArray _dst, Size ksize, double sigma1, double sigma2, ...
2018-06-03 14:31:15 4387 1
原创 手撕OpenCV源码之resize(INTER_AREA)
手撕OpenCV源码之resizeresize在modules/imgproc/src/文件件中,首先看resize API的函数实现:void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=I...
2018-06-03 13:07:57 18801 8
原创 手撕OpenCV源码之filter2D(一)
opencv中的filter2D函数原型官方解释 网站 CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1...
2018-05-01 22:20:51 7328 1
原创 手撕OpenCV源码之resize_linear原理
双线性插值双线性插值,顾名思义就是在x方向和y方向上进行线性差值.如下图,在节点 A(x1,y1)和节点B(x2,y2)之间插入节点C(x,y). A C B我们知道,线性差值,数据的值和距离是成比例的,因此: x−x1x2−x1=y−y1y2−y1x−x1x2−x1=y−y1y2−y1\cfrac{x-x_1}{x_2-x_1} = ...
2018-04-09 20:47:56 1907
原创 git之多分支协作
1.clone项目建立自己的分支刚开始接触,很多原理也不明白,以后慢慢学习.在这里仅仅总结一些操作上的问题,欢迎大家评论,讨论更好的或者更专业安全的做法. 首先是如果仅仅希望阅读一些源码,可以简单的通过clone命令,将github上的源码clone到本地,然后查看阅读.git clone https://github.com/clay2know/caffe.git如果希望将别的...
2018-03-31 22:30:48 322
原创 linux 常用命令总结
grep常用命令在当前目录下查找xxx字符串grep -r xxx ./linux下终端分屏命令tmux需要提前安装tmux工具增加分屏Ctrl + b%分屏切换Ctrl + bo添加窗口Ctrl + bc窗口切换Ctrl + bnvi相关操作vi相关操作主要是在命令模式下完成,...
2018-03-29 17:50:22 294
原创 CMake简单指南
CMake简单指南cmake内容比较多,在此总结一个简单的入门指南,与大家共享,欢迎指正错误共同进步:单个目录单个源文件单个目录多个源文件多个目录多个源文件自定义编译选项安装和测试支持GDB添加环境检查添加版本号生成安装包 -项目迁移1.单个目录单个源文件单个目录单个源文件主要使用三个命令: 1. cmake_minimum_required:是cmak...
2018-03-11 11:30:37 1098
原创 OpenCL简介
一、渊源 在硕士期间,由于实验室项目需求,本人在GPU上完成了一些医疗成像算法的加速。由于人工智能的爆发,笔者顺利找到了一份GPU优化的工作。如今即将毕业,笔者经过一年多的学习和应用,对于GPU编程有了基本的认识,因此在此编写几篇简单的入门引导博客,帮助更多的人尽快入门,少走弯路。如果总结中存在问题,也希望读者不吝赐教,共同探讨。 这个系列的博客主要介绍OpenCL编程的一些基础知识,...
2017-12-04 19:17:12 3714
原创 手写体数字识别例程——LeNet-5模型
上一篇博客中介绍了Caffe环境的搭建,本片博客中介绍一下,在caffe中训练的第一个CNN模型LeNet-5。如果存在不正确的地方欢迎指正。
2017-10-17 20:58:52 6723
原创 QR分解求线性方程组的解
线性方程组的求解有很多方式,本文简单介绍采用QR分解求解线性方程组。仅介绍具体操作,不进行公示推导及数学证明,如有错误,欢迎指正。Householder变换本文主要介绍采用Householder变换进行QR分解的方式。 QR分解在线性代数的很多问题中,需要将一个复杂矩阵分解为若干个适合分析的简单矩阵。在求取矩阵特征值、行列式以及线性方程组的求解等问题中经常回使用到矩阵分解...
2017-10-10 19:45:13 15485 3
原创 多线程堆排序算法C语言实现
多线程堆排序算法C语言实现代码主要实现对八十万个长整型数据的排序;利用8个线程实现,每个线程负责十万给数,数据由rand()函数产生。
2017-04-13 10:42:15 1703
原创 KMP算法中next数组的求取
前两篇博客分别介绍了KMP算法的理论基础及代码实现,但是KMP算法实现的核心在于next数组的求取,第一篇论文中介绍了next数组的手动求取方法;第二篇博客中介绍了代码实现,当时没有讲清楚,而且代码实现存在一定问题。本篇博文将详细介绍next数组的求取办法及代码实现。
2016-11-01 10:03:19 6956
原创 KMP算法
这个算法研究了一天,从理论推导到C语言实现,作为初学者,还是不太容易,尤其很多资料对于next矩阵有的从0开始有的从1开始。作为初学者尤其是在具体实现是可能会搞混,但其实其本质是一样,首先需要理解算法的本质,然后再考虑形式上差异就会比较容易。 首先简单介绍朴素的模式匹配算法,然后详细介绍KMP算法。
2016-10-29 20:36:11 3549 4
原创 栈实现表达式求值(C语言)
刚刚学习C语言的时候很多人就写过计算器,但是当时写的计算器只能进行一步四则运算;对于一次输入(1+2)*3+4这样的运算则没有办法计算。 本篇博文利用栈这种数据结构实现了支持带括号的表达式求值计算器;栈有栈底和栈顶指针,元素是先进后出;对于栈的操作最主要的是创建、压栈、弹栈;在实现计算器时,我们输入的表达式叫做中缀表达式,我们需要将其转为后缀表达式;然后利用后缀表达式求取表达式的值;
2016-10-28 11:32:41 17682 1
原创 双向循环链表相关操作
本实验主要完成双向循环链表的 创建 添加数据 查找数据 删除数据 遍历 实验过程中遇到的问题: 1、malloc空间申请 2、malloc空间释放
2016-10-25 14:08:27 1284
原创 C语言中单向链表的相关操作
本文主要实现了链表的整表创建和清理; 链表数据的增删改查; 程序中链表整体创建提供了头部插入和尾部插入两种方式; 数据添加也提供了头部插入和尾部插入两种方式; 实际应用中数据一般会采用,先创建链表头指针,然后利用数据添加函数加入数据。
2016-10-19 21:38:29 900
原创 OpenCL做并行滤波
本实验主要进行OpenCL一维信号的滤波;主要思路是以离散信号的序列点作为目标,一个工作项负责一个信号点的计算;这样做的好处是方便,相对于串行实现获得相当大的性能提升;但是每个工作项负载不均衡。
2016-10-15 11:25:31 1840 1
原创 OpenCL矩阵乘法的例子
前两篇博客中介绍过矩阵转置的两种方法,矩阵乘法可以先对矩阵做转置运算,然后再对应相乘; 矩阵大小是65*8192 先对8192*65的矩阵转置为65*8192; 然后由65个工作项,每个工作项负责一行数据的乘法; 完成65行数据的乘法; 转置是由8192个工作项完成的; 代码中给出了C语言实现矩阵转置的测试代码; 感兴趣的朋友可以测试一下C语言代码的运算时间和GPU运算时间的差别;
2016-10-13 09:46:56 2689
原创 OpenCL矩阵转置(二)
所谓矩阵,在内存中也是一串数字;所以转置就是将数据的存储相对位置进行调换。上一篇博客介绍了按照转置定义方法进行转置的技巧;但是那种方法仅限于方阵,对于一般矩阵转置相对比较困难(可以将一般矩阵分块);所以今天介绍一般矩阵转置方法;
2016-10-10 21:05:58 1031 1
C语言将文件数据读入内存
2016-09-29
C语言中指针作为形参传递数据的问题
2016-09-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人