自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zengwh

学习图像处理,音频处理,机器学习

  • 博客(117)
  • 资源 (7)
  • 收藏
  • 关注

原创 OpenCV 神经网络

简要介绍OpenCV的人工神经网络是机器学习算法中的其中一种,使用的是多层感知器(Multi- Layer Perception,MLP),是常见的一种ANN算法。MLP算法一般包括三层,分别是一个输入层,一个输出层和一个或多个隐藏层的神经网络组成。每一层由一个或多个神经元互相连结。一个“神经元”的输出就可以是另一个“神经元”的输入。例如,下图是一个简单3层的神经元感知器:(3个输入,2个输出以及包

2015-06-23 14:28:46 11032 5

原创 个人的Github代码合集

将个人在上课做过的课设和平时写的一些代码都上传至Github托管嵌入式的课设,实现的是TQ2440平台下的模拟NES游戏设计,手柄模拟通过屏幕或手机蓝牙控制。蓝牙模块是3.0的串口模块 https://github.com/willhope/NES-game-simulated-on-TQ2440 通信课设,蓝牙体重秤,蓝牙用的是3.0的串口蓝牙模块,压力传感器是HX711,网上买来一个简易的体

2015-04-16 21:23:43 1657

原创 人脸和性别识别(基于OpenCV)

描述人脸识别包括四个步骤人脸检测:定位人脸区域,只关心是不是脸;人脸预处理:对人脸检测出来的图片进行调整优化;收集和学习人脸:收集要识别的人的预处理过的人脸,然后通过一些算法去学习如何识别;人脸识别:识别当前人脸与数据库里的哪个人脸最相似。

2015-03-18 15:36:01 14982 4

原创 基于OpenCV性别识别

描述所谓性别识别就是判断检测出来的脸是男性还是女性,是个二元分类问题。识别所用的算法可以是SVM,BP神经网络,LDA,PCA,PCA+LDA等等。OpenCV官网给出的文档是基于Fisherfaces检测器(LDA)方法实现的。链接:http://docs.opencv.org/modules/contrib/doc/facerec/tutorial/facerec_gender_classifi

2015-03-18 10:08:44 8507 10

原创 基于对数MMSE的语音增强算法

基于对数MMSE的语音增强算法原理

2015-01-20 14:35:35 14482 76

原创 esp8266 发送企业微信

上一篇用esp8266来发送邮件,接下来这篇为大家介绍如何用esp8266来发送企业微信通知。(因为工作实在太忙,没有来得及更新文章,还有有一些朋友发私信给我的,我有时很久才看,时间久了就回复不了)

2022-08-21 17:03:45 407

原创 好用的工具介绍

介绍几个常用的工具有时经常看到一些实用的工具,都是零散的收藏到各个平台的工具,真正需要用的时候,发现老是找不着,这里统一记录下,持续更新微信公众号同步助手Markdown 文档自动即时渲染为微信图文,让你不再为微信文章排版而发愁!只要你会基本的 Markdown 语法,就能做出一篇样式简洁而又美观大方的微信图文。在线编辑地址•Netlify: https://mdhere.netlify.app•Gitee Pages:https://doocs.gitee.io/md•GitHub Pages:https

2021-04-24 21:11:03 192

原创 链表排序

描述给链表的结点进行排序。比如给出 1->3->2->0->null ,排序后 0->1->2->3->null。 这里介绍链表的插入排序和归并排序。链表插入排序插入排序就是已经前面N−1N-1个结点有序的情况下,将第NN个结点分别跟前面的有序结点比较,使前NN个结点仍然有序。跟数组的插入排序有所不同的是,数组是从后面开始比较,由于链表只能从前到后,所以链表插入排序是从前面依次开始比较。最主要的思想

2015-08-26 22:38:20 1240

原创 二叉树最大深度和最小深度

二叉树的最大深度给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的距离。如果二叉树为空,则深度为0 如果不为空,分别求左子树的深度和右子树的深度,去最大的再加1,因为根节点深度是1,要加进去。int maxDepth(TreeNode *root) { // write your code (here) if(root == NULL)

2015-08-12 06:50:45 13443

原创 判断二叉树是否为平衡树

平衡二叉树给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 先求左子树和右子树的最大深度,然后判断是否相差大于1,如果是,则不可能是,如果相差小于,继续递归调用判断左子树和右子树是否都是平衡二叉树。代码实现bool isBalanced(TreeNode *root) { // write your

2015-08-12 06:49:50 2257

原创 验证二叉查找树

二叉查找树给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。 节点的右子树中的值要严格大于该节点的值。 左右子树也必须是二叉查找树。因为二叉查找树的中序遍历是有序的。所以验证是否为二叉查找树,用中序遍历这个二叉树,如果前一个结点的值大于当前结点的值,则证明这个不是二叉树。代码实现bool isValidBST(TreeNode *ro

2015-08-12 06:48:55 1959

原创 翻转二叉树(递归与非递归)

翻转一棵二叉树样例 1 1 / \ / \2 3 => 3 2 / \ 4 4递归版本先翻转左子树,后翻转右子树,然后对整个树进行翻转void swapTree(TreeNode *&root){ TreeNode *tmp = root->left; root->left = root->right

2015-08-12 06:47:45 6329

原创 七大排序算法

排序各种排序算法的比较 冒泡排序基本定义两两比较相邻记录的的关键字,如果反序则交换,直到没有反序的记录为止。时间复杂度分析最好的情况是,数组是有序的,只需要n - 1次的比较,时间复杂度是O(n)O(n) 最坏的情况是,数组是逆序的,需要比较∑i=2n(i−1)=1+2+3+...+(n−1)=n(n−1)2\sum_{i=2}^{n} (i - 1) = 1+2+3+...+(n-1) = \

2015-08-03 22:14:18 1134

原创 二分查找实现

二分查找二分查找的前提是数组必须有序。这个算法据某本说,百分之九十的都会写错。编写程序需要注意的是非法输入尽量使用迭代,因为如果数组很大的话,递归有可能是栈溢出循环判断条件注意mid的求值方法,mid = ((right - left) >> 1) + left ;可以防止两个整型值相加时溢出。并注意>>运算符优先级低于+ - * / %,所以要对左移右移加括号。如果没有加括号,得出的答案是

2015-07-30 21:00:22 1052

原创 atoi代码实现

atoi函数atoi函数是实现数字字符串转整型数,实现代码的时候,要特别注意以下几点:前面有空格,调过要注意符号,即是正还是负数非法输入处理溢出代码实现int my_atoi(const char *str){ const char *s; char c; unsigned int cutoff; int acc; int neg, any, cu

2015-07-30 20:32:43 1444

原创 【面试题】在O(1)时间复杂度删除链表节点

题目描述给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。样例 给定 1->2->3->4,和节点 3,返回 1->2->4。(372) Delete Node in the Middle of Singly Linked List http://www.lintcode.com/zh-cn/problem/dele

2015-07-28 15:01:17 4024

原创 【面试题】删除链表中倒数第n个节点

问题描述给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例 给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.解题思路定义两个指针,刚开始分别指向头结点,然后先让一个指针先走n-1步,接着两个指针同时遍历链表,当第一个指针到达链表尾部的时候,第二个指针指向的就是要删除的倒数第n个结点。 编程需要注意的

2015-07-28 14:04:11 4744

原创 Linux 使用core file文件快速定位程序崩溃代码行

问题描述如果在 Linux下编写程序,有时运行程序的时候程序崩溃,比如说只有“Segmentation fault (core dumped) ”,程序比较小的话,还可以一行一行查看,但是如果程序很庞大,一行行查询,效率非常低下。Linux下可以程序可以生成core file文件,借助gdb很快能定位到崩溃的代码行。解决方案测试程序,除零操作,程序会崩溃/*test.c*/#include <

2015-07-26 21:47:45 3645

原创 error: stray ‘\342’ in program

如果遇到下面的问题error: stray ‘\342’ in programerror: stray ‘\200’ in programerror: stray ‘\235’ in programerror: stray ‘\342’ in programerror: stray ‘\200’ in programerror: stray ‘\230’ in programerror:

2015-07-25 08:34:18 16880

原创 Android NDK开发环境配置

点击Project->Properties->Builders->New,新建立一个Builder。在弹出的对话框上面点击Program在弹出的对话框【Edit Configuration】中,配置选项卡【Main】:Location中需要填入nkd-build.cmd的路径(NDK安装目录下)。Working Diretcoty中需要填入TestNDK的工程根目录。配置选项卡【Refresh】

2015-07-24 09:39:31 801

原创 【解决方法】Unexpected namespace prefix “xmlns” found for tag Layout

问题描述出错代码如下:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"

2015-07-24 09:34:10 4153

原创 Adobe Flash Player 因过期而遭到阻止的解决办法

今天Chrome内核的所有浏览器打开网页均提示“Adobe Flash Player 因过期而遭到阻止”,每一次都弹出这条信息,非常烦人。解决办法找到浏览器的快捷方式,右击点属性,在目标(T)中 添加 “–allow-outdated-plugins” ,表示允许过期插件运行。像我的添加之后,如下格式:注意“–allow-outdated-plugins”与“.exe”有空格C:\Users\zen

2015-07-15 19:03:38 12105

原创 内存泄漏检测

今天阿里内推电话面试,估计给跪了,其中问到一个问题就是,如何检测程序的内存泄漏问题。学生写的程序几乎比较小,没做过大型项目,所以内存泄漏问题一般情况下,肉眼都可以解决问题,直接看下哪块被malloc或new的内存,没有对应的free或delete掉。面试完,网上寻找了下答案,发现借助工具来检测非常方便而且精准。google搜索下关于这方面的资料,发现写得很不错,分享给大家,顺便标记下。强烈推荐第一篇

2015-07-13 20:10:21 738

原创 【面试题】寻找旋转排序数组中的最小值

题目描述假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。http://www.lintcode.com/zh-cn/problem/find-minimum-in-rotated-sorted-array/解题思路基本思想采用二分查找,不过首先要判断这个排序数组是否直接有序,如果是0 1 2 3 4 5 6

2015-07-11 21:42:45 731

原创 【面试题】用栈实现队列

题目描述正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。 http://www.lintcode.com/zh-cn/problem/implement-queue-by-two-stacks/代码实现class Queue {publ

2015-07-11 20:31:31 854

原创 前序遍历和中序遍历树构造二叉树

样例题目来自LintCode, 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \1 3代码实现/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int va

2015-07-11 16:24:21 832

原创 【面试题】-反转句子

题目描述给定一个字符串句子,进行反转,不能申请额外的内存,比如“This is a sentence”,输出就是”sentence a is This”解题思路先对每个单词进行反转,结果为 “sihT si a ecnetnes” 然后再对整个句子反转,就是最终结果。 反转不能利用额外的空间,那就使用头尾指针,交换头尾指针的数据即可代码实现#include <stdio.h>#include <

2015-07-08 17:21:03 1391

原创 散列表-开放地址法和链地址法的实现

基本定义散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系 f,使得每个关键字key对应一个存储位置f(key)。这种对应关系f称为散列或哈希函数。采用上述思想将数据存储在一块连续的存储空间中,这块连续的存储空间称为散列或哈希表。关键字对应的存储位置称为散列地址。散列技术最适合的求解问题是查找与给定值相等的记录。 如果碰到两个不同的关键字key1≠key2key_1 \neq key

2015-06-30 21:21:13 9869

原创 排序5-快速排序

基本思想快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。 算法步骤算法步骤简述如下:选择一个基准值(pivot)(选择方法很多,可以固体选某个值,比如

2015-06-30 13:54:42 727

原创 排序4-归并排序

基本思想归并排序(Merge Sort)完全遵循上述分治法三个步骤: 1、分解:将要排序的n个元素的序列分解成两个具有n/2个元素的子序列; 2、解决:使用归并排序分别递归地排序两个子序列; 3、合并:合并两个已排序的子序列,产生原问题的解。 所以说归并排序一种分治算法的典型应用。 归并排序过程动态演示

2015-06-29 15:02:48 590

原创 排序3-堆排序

基本思想堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以看作是对选择排序的改进。 通常堆是通过一维数组来实现的。在起始数组为0的情形中:父节点i的左子节点在位置(2*i+1);父节点i的右子节点在位置(2*i+2);子节点i的父节点在位置floor((i-

2015-06-29 10:21:15 633

原创 排序2-希尔排序

希尔排序(Shell Sort)基本思想先将整个待排元素序列分割成若干子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序(增量为1)代码实现void Shell_sort(int arr[], int len){ int increment = len / 2; whi

2015-06-28 19:43:52 529

原创 Markdown 编辑数学公式的参照模板

下面是一个公式,图片格式的,维基百科上的。 Markdown的格式如下:\frac{1}{\pi}=\frac{2\sqrt{2}}{9801}\sum_{k=0}^\infty\frac{(4k)!(1103+26390k)}{(k!)^4396^{4k}}上面的专业词语解释如下: 这个公式解释如下:\pi 表示希腊字母 π,\infty 表示 ∞。更多的符号请参见:Special Symbo

2015-06-27 19:31:36 2026

原创 排序1-冒泡,选择和插入

冒泡排序(Bubble sort)最简单,效率最低的冒泡排序冒泡排序是一种交换排序,基本思想是:两两比较相邻记录的的关键字,如果反序则交换,直到没有反序的记录为止。 代码实现void Bubble_sort(int arr[], int len){ for(int i = 0; i < len; i ++) { for(int j = i + 1; j < len

2015-06-27 18:33:20 634

原创 【剑指offer】空格替换

Question设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。Solution 1需要额外的一个数组:class Solution {public: /** * @param string: An array of Char * @param length: The true len

2015-06-27 14:57:22 772

原创 【面试题】二叉搜索树转换双向链表

题目描述输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现。 二叉搜索树,左子结点的值总是小于父结点的值,右子结点的值总是大于父结点的值。解题思路如果用中序遍历二叉搜索树,遍历结点的顺序就是从小到大。所以这题的基本思路就是:用中序遍历一下二叉树,同时保留当前链表的最后一个指针pLast,以及当前指针pC

2015-06-24 15:57:48 1497

原创 【LeetCode】Binary Tree Level Order Traversal(层序遍历)

QuestionGiven a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).For example: Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20 /

2015-06-24 15:26:08 692

原创 【面试题】-二叉树

分别有求二叉树的节点个数,深度,和前序,中序,后序的递归和非递归实现#include <iostream>#include <stack>#include <queue>/* A B C D E F G H I J K*/using namespace std;#define OK 1

2015-06-23 21:06:04 675

原创 OpenCV中的SVM

#include "stdafx.h" #include <opencv2/opencv.hpp> #include <iostream> #include <fstream> #include <sstream> #include <math.h> #include <vector> #include <windows.h> #inc

2015-06-23 15:27:28 1158

原创 【面试题】-单链表反转

问题描述将一个单链表反序输出,比如原单链表位1->2->3->4->NULL,反序输出后变为4->3->2->1->NULL解题思路

2015-06-15 22:29:22 3869

语音增强光盘下载链接

语音增强光盘下载链接 包括以前的和最新的 最新的从外网下的

2015-08-03

OpenCV ANN 神经网络 数字识别

OpenCV ANN 神经网络 数字识别 http://blog.csdn.net/zwhlxl/article/details/46605507 交叉训练,特征维度65,网络层数10 正确率1.000000 交叉训练,特征维度65,网络层数20 正确率1.000000 交叉训练,特征维度65,网络层数30 正确率1.000000 交叉训练,特征维度65,网络层数40 正确率0.990000

2015-06-28

基于opencv的性别识别

性别识别的工程文件有LDA PCA PCA+LDA方法 还包括自己采集的一些数据

2015-03-18

GMM高斯建模讲义(台湾)

关于GMM的介绍,并分别用两种方法估计GMM的参数,讲得通俗易懂,值得推荐

2014-12-10

GMM高斯建模(台湾)

关于GMM的介绍,并分别用两种方法估计GMM的参数,讲得通俗易懂,值得推荐

2014-12-10

coursera 课程下载利器windows版本

可汗学院的Dhulkee Coursera 是在线开放课程coursera的傻瓜式的课程下载工具window版本

2014-07-04

数字识别程序包括文档

数字识别OCR c++实现,包括文档,源代码,效果还可以

2014-05-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除