- 博客(156)
- 资源 (12)
- 收藏
- 关注
转载 C++ wchar_t *和char * 互转
转自:https://blog.csdn.net/lightspear/article/details/54695123说道wchar_t和char两个类型大家都不会陌生wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节char:当然就是指一个字节,在windows下面默认是gbk编码的 所以在windows 下 wchar_t 转 char也就是编...
2018-07-19 17:57:01
4528
转载 图像连通域分析
转自:https://blog.csdn.net/tiandijun/article/details/51279643,转载仅为方便学习。一、前言二值图像的图像的亮度值只有两个状态:黑(0)和白(255)。二值图像在图像分析与识别中有着举足轻重的地位,因为其模式简单,对像素在空间上的关系有着极强的表现力。在实际应用中,很多图像的分析最终都转换为二值图像的分析,比如:医学图像分析、前景检测、字符识别...
2018-05-30 16:19:06
15061
2
原创 Windows核心编程之邮槽实现进程间通信
邮槽是Windows系统提供的一种单向通信的机制。即进程中的一方只能写入或读取数据,而另一方则只能读取或写入数据。通过邮槽,用户可以实现一对多或跨网络的进程之间的通信。但是,邮槽能传输的数据非常小,一般在400KB左右。如果用户操作的数据过大,可能会导致邮槽不能正常工作。1.创建邮槽 用户在实际编程时,可以使用Windows邮槽实现进程间通信。但是用户必须首先创建邮槽。在Window
2017-12-11 19:19:08
1282
原创 Windows核心编程之进程间通信
1 进程与进程通信 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程
2017-12-11 18:35:05
776
转载 Windows核心编程之多进程概述
一、进程的概念 进程是是一个正在运行的程序的实例(飘~~~),是系统分配资源的单位(线程是执行的单位),包括内存,打开的文件、处理机、外设等,进程由两部分组成: 1、进程的内核对象:即我们通常所讲的PCB(进程控制块),该结构只能由该内核访问,他是操作系统用来管理进程的一个数据结构,操作系统通过该数据结构来感知和管理进程;它的成员负责维护进程的各种信息,包括进程的状态
2017-12-11 18:18:52
2013
转载 C++进阶—>Win32 多线程的创建方法和基本使用
Summary From:https://software.intel.com/zh-cn/blogs/2011/12/02/win32/?cid=sw:prccsdn2086总结Win32提供的创建多线程相关的API接口和基本的使用框架。Ref:MSDN: http://msdn.microsoft.com/zh-cn/library/y6h8hye8(v=VS.100)
2017-12-06 21:27:09
5602
1
转载 C++进阶—>_beginthreadex和CreateThread的区别和联系
_beginthread 和 CreateThread 的区别转自: http://wenku.baidu.com/view/adede4ec4afe04a1b071dea4.html程序员对于Windows程序中应该用_beginthread还是CreateThread来创建线程,一直有所争论。本文将从对CRT源代码出发探讨这个问题。I. 起因今天一个朋友问我程序
2017-12-06 21:19:03
1594
原创 C++进阶—>线程同步随笔
线程同步主要有五种方法:原子访问,临界区,信号量,事件和互斥量;其中原子访问和临界区属于用户模式的同步;信号量,事件和互斥量属于内核模式的同步。 原子访问是通过将共享资源设置为原子变量,当一个线程访问的时候,其余的线程不得访问。C++使用临界区,信号量,事件和互斥量实现线程同步的时候,即定义相应的同步控制对象句柄,通过获取控制对象是否空闲来决定是否执行线程,若控制对象空闲则获取该对
2017-12-06 16:03:51
413
原创 C++进阶—>Socket通信那点事
1、网络中进程之间如何通信?本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:消息传递(管道、FIFO、消息队列)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)共享内存(匿名的和具名的)远程过程调用(Solaris门和Sun RPC)但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯
2017-11-23 17:37:04
1214
转载 BP神经网络及其C++实现
0 前言 神经网络在我印象中一直比较神秘,正好最近学习了神经网络,特别是对Bp神经网络有了比较深入的了解,因此,总结以下心得,希望对后来者有所帮助。 神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据挖掘等领域。神经网络本身是一个比较庞大的概念,从网络结构类别来划分,大概有:多层前馈神经网络、径向基函数网络(RBF)、自适应谐振理论网络(ART)、
2017-11-15 16:37:55
1349
转载 C++进阶—>带你理解多字节编码与Unicode码
本篇文章将讲解C++开发中容易混淆的另一个概念——多字节字符集与Unicode字符集。多字节字符与宽字节字符char与wchar_t我们知道C++基本数据类型中表示字符的有两种:char、wchar_t。 char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为它表示一个字时可能是一个字节也可能是多个字节。一个英文字符(如’s’)用一个char(一个字节)
2017-11-12 23:36:47
1522
原创 MFC中CFileDialog及SHBrowseForFolder
MFC中实现通过按钮来选择文件路径或文件夹路径;(1)CFileDialog类能够选择文件,并获取其路径(当然也可以通过获取文件路径再去除文件名而获得其所在文件夹路径,前提是需要先选择文件,适用于打开文件然后保存的情况,若直接想选择文件夹作为保存路径则使用SHBrowseForFolder方法)。 CString savepath; CFileDialog dlg(TRUE
2017-11-09 11:14:17
1654
原创 MFC中基于OpenCV实现Picture Control控件成像方法
MFC中基于OpenCV实现Picture Control控件成像方法有两种,一种是OpenCV2.2以前版本的绘制,另外一种是OpenCV2.2以后版本的绘制。(1)在OpenCV2.2之前的版本利用CvvImage.h,CvvImage.cpp中的DrawToHDC函数实现。(2)在OpenCV2.2之后的版本利用namedwindow创建窗户与控件的窗口子父绑定实现。1.
2017-11-08 10:32:26
1588
转载 C++进阶—>C++内存管理
[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支
2017-11-06 14:10:34
544
原创 C++进阶—>const、define和enum的区别和用途
1.区别这三种都可以定义常量。define是宏定义,编译器不对其进行错误检查,在预编译阶段处理,没有作用域限制属于全局常量,在程序中编译器会对定义的常量名以数值进行替换,且每次替换都分配内存,此方法对于大量常量的情况下会占用较多内存从而导致程序效率;const是常量定义,在编译阶段处理,作用域限制,定义常量分配内存后后续再使用常量情况下不会再为其分配内存,只分配一份内存地址,故常用于此
2017-11-03 20:59:15
1879
转载 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法
从K近邻算法、距离度量谈到KD树、SIFT+BBF算法前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1、KD树;2、神经网络;3、编程艺术第28章。你看到,blog内的文章与你于别处所见的任何都不同。于是,等啊等,等一台电脑,只好等待..”。得益于田,借了我一台电脑(借他电脑的时候,我连表示感谢,他说“能找到工作全靠你的博客,这点儿小忙
2017-11-03 20:23:27
380
转载 linux c++ 服务器端开发面试必看书籍
由于很多朋友希望加入到Linux c++服务器端开发的队伍中,本人就结合自己的面试经历并整理了自己阅读的相关书籍,同大家分享,一起进步。人个认为以下是进入这个方向的必看书籍,各系列难度由浅入深的排序。题外话: 推荐一个 github 上的 开源书籍,有各种语言版本的,建议看 英文版 ,当然也有 中文版 非常之棒!!一、算法基础系列数据结构基础(C语言版)》朱仲涛 译《剑指O
2017-10-31 19:57:43
500
原创 RANSAC算法实现去除误匹配并计算拼接矩阵-随笔
1.RANSAC算法实现去除误匹配并计算拼接矩阵流程(1) 从样本集中随机抽选一个RANSAC样本,即4个匹配点对(至少4个匹配点对,才能计算出3*3变换矩阵);(2) 计算当错误概率为0.1(即90%正确率)的情况下所需最少匹配点对数,赋值给in_min;(3) 计算初始的错误概率p = pow( 1.0 - pow( in_frac, m ), k )(初始状态k=
2017-10-31 14:17:01
5727
1
原创 最小二乘法及OpenCv函数
1.最小二乘法 我们以最简单的一元线性模型来解释最小二乘法。什么是一元线性模型呢? 监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系
2017-10-31 13:55:51
10866
原创 基于RobHess的SIFT图像拼接知识点随笔
1.SIFT算法具有尺度不变性在于构建的高斯尺度空间;2.SIFT算法具有旋转不变性在于特征方向向量;3.K-d数以图像特征点的128维特征描述子均值为依据进行划分、构建;4.特征点匹配是一个图像的所有特征点依次在另一幅图像的k-d树中寻找最近邻和次近邻,寻找依据是欧式距离;5.欧式距离是两个特征点的128维描述子依次作差、平方,求和;6.图像拼接流程:摄像头图像获取->利用棋
2017-10-29 20:07:31
521
转载 C++进阶—>malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内
2017-10-28 16:40:21
340
转载 C++进阶—>线程同步的四种方式
线程之间通信的两个基本问题是互斥和同步。(1)线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。(2)线程互斥是指对于共享的操作系统资源(指的是广义的”资源”,而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何
2017-10-28 14:30:17
792
原创 C++进阶—>各类型占大小及sizeof函数
本文针对32位编译器而言,64位编译器同理。/**********************************************各类型所占大小***************************************************/本部分参考http://blog.csdn.net/ynnmnm/article/details/45826963,但存在改进!#i
2017-10-28 14:00:36
1172
1
原创 C++进阶—>子类、父类、父父类间虚函数调用详解
class one{public: one(int data=0):m1_data(data) { } int GetData() { return dodata(); } virtual int dodata() { return m1_data; }public: int m1_data;};class two:public one{pub
2017-10-28 10:46:41
10646
2
原创 C++进阶—>易错知识点随笔
static 静态变量和静态成员函数:1)静态变量和静态函数是属于整个类的而不是某个对象,其只存储一份地址供所有对象共用;2)使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存;3)静态成员函数不能调用非静态成员变量和非静态成员函数,因为静态成员函数属于整个类,在类实例化对象之前就已经分配空间了,而类的非静态成员必须在类实例化对象后才有内存空间,就
2017-10-27 18:47:36
227
原创 C++进阶—>互斥量:Event控制:多线程实现生产者-消费者例子
一个典型的生产者-消费者问题,它们公用的资源是SharedBuffer,当Buffer中有数据且未满时,两个线程都可以运行,当Buffer为 空时,Consumer就要等待,直到Buffer不为空,这里就是用event来实现的;同样,当Buffer为满时,Producer就要等待。 开发环境:VS2012,win32控制台程序#include "stdafx.h"#include
2017-10-26 20:58:59
429
原创 C++进阶—>CreateEvent控制线程
1.概述 事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。2.CreateEvent函数产生事件对象的函数如下: HANDLE CreateEvent(LPSECURIT
2017-10-26 20:28:14
1377
原创 C++进阶—>终止线程的运行
1 终止线程的运行若要终止线程的运行,可以使用下面的方法:• 线程函数返回(最好使用这种方法)。• 通过调用E x i t T h r e a d函数,线程将自行撤消(最好不要使用这种方法)。• 同一个进程或另一个进程中的线程调用Te r m i n a t e T h r e a d函数(应该避免使用这种方法)。• 包含线程的进程终止运行(应该避免使用这种方法)。下面将介
2017-10-26 14:53:18
1984
原创 C++进阶—> CloseHandle详解及CloseHandle后线程未停
函数说明BOOL CloseHandle(HANDLE hObject);参数hObject :代表一个已打开对象handle。返回值TRUE:执行成功;FALSE:执行失败,可以调用GetLastError()获知失败原因。函数用于关闭一个内核对象。CloseHandle到底做了什么?当调用CloseHandle成功后,相关的内核对象的引用
2017-10-26 14:14:52
13134
3
原创 C++之memset使用详解及This function or variable may be unsafe错误
1.memset使用详解1)void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2).memset() 函数常用于内存空间初始化。如:char str[100];memset(str,0,100);3).memset可以方便的清空一个结构类型的变量或数组。如:struct sam
2017-10-26 13:06:56
588
转载 C++进阶—>C++中的多线程
本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法。创建线程在Windows平台,Windows API提供了对多线程的支持。前面进程和线程的概念中我们提到,一个程序至少有一个线程,这个线程称为主线程(main thread),如果我们不显示地创建线程,那我们产的程序就是只有主线程的间
2017-10-26 11:36:12
272
转载 C++进阶—>线程优先级与线程安全
线程优先级现在主流操作系统(如Windows、Linux、Mac OS X)的任务调度除了具有前面提到的时间片轮转的特点外,还有优先级调度(Priority Schedule)的特点。优先级调度决定了线程按照什么顺序轮流执行,在具有优先级调度的系统中,线程拥有各自的线程优先级(Thread Priority)。具有高优先级的线程会更早地执行,而低优先级的线程通常要等没有更高优先级的可执行线
2017-10-26 11:34:46
3505
转载 C++进阶—>以操作系统的角度述说线程与进程
什么是线程什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识。我不能确保能把它讲的话,也不能确保讲的内容全部都正确。即使这样,我也希望尽可能地把他讲通俗一点,讲的明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领域,希望通过我的理解揭开它一层一层神秘的面纱。 任务调度线程是什么?要理解这个概念,须要先了解一下操作
2017-10-26 11:32:49
326
原创 C++进阶—>内联函数inline
在.h中int max(int a, int b);在.cpp中int max(int a, int b){ return a>b?a:b;}定义函数的好处:1)通过函数名称,可以直观直接函数意义;2)如果需要修改,修改函数比修改变量表示容易;3)函数可以重复调用。但函数缺点:调用函数比直接的表达式要慢的多,大多数机器在调用函数的过程中
2017-10-20 10:48:30
211
转载 C++进阶—>函数重载、重写、重定义的区别
函数重载(overload)函数重载是指在一个类中声明多个名称相同但参数列表不同的函数,这些的参数可能个数或顺序,类型不同,但是不能靠返回类型来判断。特征是:(1)相同的范围(在同一个作用域中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无(注:函数重载与有无virtual修饰无关);(5)返回值可以不同;函数重写(也称为覆盖 overr
2017-10-13 15:53:45
444
原创 C++进阶—>friend
0.前言friend友元,顾名思义是好朋友的意思,即我是你的好朋友,你所私有的东西会跟我分享,为我所用;通常分为友元函数和友元类。1.友元函数1)友元函数能够访问类中的私有变量;2)友元函数可以定义在类中的任何位置,public、protected、private中均可;3)友元函数为全局函数,在实现中无需加上类标识;4)函数参数为类的对象,以便对类成员进行操作;5
2017-10-12 16:39:13
298
原创 C++进阶—>static关键字
0 前言为什么引入static关键字? 类都有自己的成员函数和成员变量,每个类对象都具有类中所定义,各自的成员函数和成员变量,为了让不同的对象能共同访问同个类成员变量(或函数),引入static关键字,使得具有static关键字的成员变量(或函数),各个对象共同拥有。1静态成员变量1)定义静态成员变量Ø 关键字 static 可以用于说明一个类的成员,
2017-10-12 16:19:44
233
原创 C++进阶—>const和define机制剖析
C++中的const和define1 const基础知识(用法、含义、好处)初级理解:const是定义常量==》const意味着只读 const int a;int const b;const int *c;int * const d;const int * const e ;含义://第一个第二个意思一样 代表一个常整形
2017-10-11 14:18:25
302
原创 C++进阶—>类模板
1类模板 1.1为什么需要类模板类模板与函数模板的定义和使用类似,我们已经进行了介绍。 有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类: Ø 类模板用于实现类所需数据的类型参数化 Ø 类模板在表示如数组、表、图等数据结构显得特别重要, 这些数据结构的表示和算法不受所包含的元素类型的影响1.2继承中的类模板语法
2017-10-10 20:57:29
395
ippicv_windows_20141027
2017-07-10
提取SIFT并用RANSAC剔去错匹配byRobHess
2017-03-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人