C++
跬步达千里
深度学习 图像处理 tensorflow caffe python C++
展开
-
模板类的特例定义
opencv中有一个模板类DataType,该函数定义如下: 该类有自己的模板_Tp,但是如果有某一个类型需要与这个类的内部定义有区别怎么办,可以重新将该类型下的类进行再次定义: 另外,对于模板类,如果对应的某个特例类型下,有某个函数与其他函数不一致,也可以自己重新申明,并给出定义(下面给出了其申明,没有给出定义,查看定义可以去opencv源码中查找,这里未给出): 该函数重新定义了P原创 2016-08-26 10:24:22 · 778 阅读 · 0 评论 -
opencv访问图像
opencv访问图像有几个常见的方法: 1 通过at方法:Mat image(Size(height,width),CV_8UC1);image.at<uchar>(y,x)2 通过at使用point方法:image.at<uchar>(cv::Point2d(x,y))3 如果提前知道image的类型,比如知道是为uchar://当为单通道时Mat_<uchar> image(height,原创 2016-06-30 17:14:43 · 540 阅读 · 0 评论 -
C++相关
1 C++的STD与windows的min、max冲突 冲突的解决办法是对于引用std的min和max时,用(std::min)(a,b),同样对于其他的min和max要将作用域和函数名先包起来。2 inline函数要在哪个文件中声明就在哪个文件中定义,比如在.h文件中声明了inline函数,那么,要么在声明的时候就直接定义,要么就在当前h文件的下面给出定义,如果在h文件中声明,在cpp文件中定义原创 2016-09-02 17:10:07 · 420 阅读 · 0 评论 -
dllexport、dllimport区别
以下全部是经过实际测试过的(测试环境VS2010): 要将某个库文件导出成dll的时候 可以使用dllexport、实际上也可以使用dllimport, 例如有一个类 class myclass{ int func(); int func1(); } 要将这个类进行导出成库文件,那么只需要这样定义(下面所有的代码都假设你在生成库文件的代码中自定义了宏名:DLL_EXP原创 2016-07-22 09:42:13 · 6316 阅读 · 0 评论 -
opencv的setTo函数
opencv的setTo函数是将图像设置为某个值,比如有一个Mat src,想将他的值全部设置成0,则可以src.setTo(0)另外,setTo还有更为高级的用法,比如,对于一个已知的src,我们要将其中大于或者小于某个值的像素值设置为指定的值,则可以如下:src.setTo(0,src < 10);这句话的意思是,当src中的某个像素值小于10的时候,就将该值设置成0.还有一点,这是自己原创 2016-06-23 17:58:16 · 14995 阅读 · 1 评论 -
opencv的sort、sortIdx函数
opencv的sort函数是将图像进行排序,可以根据列或者行,按照升序或者降序对矩阵进行重新排序,如果想将整个图像进行排序,则可以:Mat flat; tmpsplit; tmpsplit.reshape(1,1).copyTo(flat); cv::sort(flat,flat,CV_SORT_EVERY_ROW + CV_SORT_ASCENDING);另外,opencv还有另外一个函原创 2016-06-23 17:50:56 · 14418 阅读 · 0 评论 -
互斥
CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行)。HANDLE hMutex; hMutex = ::CreateMutex(NULL, FALSE, NULL); ::WaitForSingleObject(hMutex, INFINITE); // 1 ::WaitForSingleO转载 2016-06-20 17:59:53 · 385 阅读 · 0 评论 -
C++11原子操作
所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借助转载 2016-06-20 17:18:51 · 496 阅读 · 0 评论 -
stringstream的基本用法
stringstream的基本用法:可以用这个类将不同的数据类型转化为字符stringstream是字符串流。它将流与存储在内存中的string对象绑定起来。在多种数据类型之间实现自动格式化。1.stringstream对象的使用#include<sstream>#include<iostream>using namespace std;int main(){ string lin原创 2016-06-13 16:39:32 · 501 阅读 · 0 评论 -
Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting
Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting这些术语,我经常搞混淆,现在把它们放在一起,以示区别。(部分文字来自网络,由于是之前记的笔记,忘记来源了,特此向作者抱歉)Bootstraping: 名字来自成语“pull up by your own b转载 2016-06-16 09:30:07 · 444 阅读 · 0 评论 -
二叉树相关
下面是几个讲的比较好的二叉树网站,以后会找时间把第一个进行翻译:http://cslibrary.stanford.edu/110/BinaryTrees.htmlhttp://www.cprogramming.com/tutorial/lesson18.htmlhttp://math.hws.edu/eck/cs225/s03/binary_trees/原创 2016-06-08 10:31:29 · 548 阅读 · 0 评论 -
读取文件夹中文件所有文件名
来源:opencv中samples\cpp\latentsvm_multidetect.cppstatic void readDirectory( const string& directoryName, vector<string>& filenames, bool addDirectoryName=true ){ filenames.clear();#if defined(WIN32)原创 2016-06-13 16:59:26 · 1310 阅读 · 0 评论 -
C++ protected friend 继承
protected专门就是为继承(子类)设计的 用public继承 那么基类所有的访问标识在子类不变 protected还是protected protected只有类本身 和类的子类可以访问,对象是无法访问的! 除了在继承上 他跟private没有任何区别! private 子类也将不能访问! 只是在继承上不同 其他都一样的private无法继承 也就是说子类也不能用基类的 pri原创 2016-08-22 16:01:58 · 2131 阅读 · 1 评论 -
一些与编译相关的概念
MinGW 是minimalist gnu for Windows的缩写。是一个可以自由使用和发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台下 生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。简单点说,就是一个交叉编译平台,能够在linux下使用GNU生成Windows程序,也能够在Windows下使用GN原创 2016-10-28 11:41:14 · 437 阅读 · 0 评论 -
softmaxwithloss入门及88.3365解决之道
softmax with loss:softmax从名字上看就是软最大,其做法其实很简单:前提:最后输出向量长度为N,与要区分的类别个数一致1 第一步,取向量的最大值,将每个值减去最大值,这样就会将所有的数都变成非正数2 求softmax:3 经过第二步就会将向量变成全部小于1,大于0,累加为1的向量,这样就比较符合我们输出每个类别的概率的判断:在那个类别下的值原创 2017-08-03 15:06:15 · 1491 阅读 · 0 评论 -
extern "C"的用法解析
extern "C"的用法解析 (1 extern C修饰,1是指全局变量;)(2是指被extern "C"修饰的变量和函数是按照C语言方式编译和连接的)1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人原创 2016-05-27 10:18:28 · 721 阅读 · 0 评论 -
caffe中几个基本概念
caffe中几个基本概念: 1 caffe中的blob结构是用来进行数据存储,交换和处理网络中正向反向迭代时的数据和导数信息的数据结构 blob是caffe的标准数组结构,他提供了一个统一的内存接口,其将内部的cpu,gpu数据之间的传输与存储封装起来,免去用户外部对gpu的操作 blob详细描述了信息是如何在layer和net中存储和交换的Blob 是 Caffe 中处理和传递实际数据的数据原创 2017-02-28 11:17:31 · 3262 阅读 · 0 评论 -
linux系统上编译arm版的protobuf库
从官网下载protobuf-2.6.0.tar.gz.第一步是编译出x86版的库和protoc,按顺序执行下列命令tar -zxvf protobuf-2.5.0.tar.gzcd protobuf-2.5.0./configuremakemake checksudo make install注意make in原创 2017-05-27 15:01:57 · 4995 阅读 · 0 评论 -
使用notepad编辑器批量在行首添加指定字符
在查找目标中输入“^”代表行首,“$”代表行末,下方的查找模式要改成“正则表达式”。如果替换中有字符,则用“\”转义,例如要插入“()”的写法是“”,""如下图: 点击全部替换如下图 也可参考网址:http://jingyan.baidu.com/article/6dad5075ce7c61a123e36e03.html转载 2016-11-11 17:25:51 · 6984 阅读 · 0 评论 -
sublime 中文乱码
解决方法:1 安装Package Control:自动安装:1、通过快捷键 ctrl+` 或者 View > Show Console 菜单打开控制台2、粘贴对应版本的代码后回车安装适用于 Sublime Text 3:import urllib.request,os;pf='Package Control.sublime-package';ipp=sublime原创 2016-06-30 15:25:34 · 411 阅读 · 0 评论 -
C++关键字operator用法
1. operator 用于类型转换函数:类型转换函数的特征:1) 型转换函数定义在源类中; 2) 须由 operator 修饰,函数名称是目标类型名或目标类名; 3) 函数没有参数,没有返回值,但是有return 语句,在return语句中返回目标类型数据或调用目标类的构造函数。类型转换函数主要有两类:1) 对象向基本数据类型转换:对象向不同类的对象的转换:例程1: //通过类型原创 2016-06-14 14:53:03 · 1217 阅读 · 0 评论 -
C++中的using
C++中的using,除了常规的命名空间意外,还有以下用处: 用作类型别名,类似类型定义: 语法using identifier = type_name;的例子using flags = std::ios_base::fmtflags;using func = void (*) (int,int);// typedef std::ios_base::fmtflags flags;// ty原创 2016-06-29 17:07:30 · 452 阅读 · 0 评论 -
opencv的change log
https://github.com/Itseez/opencv/wiki/ChangeLog转载 2016-05-27 16:08:46 · 530 阅读 · 0 评论 -
vector的初始化问题
vector也是可以初始化的,可以指定初始的长度和初始的值vector rho(nSamples, 0);nSamples是初始的长度,0是初始的值原创 2016-05-27 15:14:57 · 608 阅读 · 0 评论 -
C++纯虚函数
在C++中如果在一个函数的声明中加上virtual ,并且降这个函数赋值为0,那么证明这个函数是纯虚函数,函数的特点如下:1 该函数在声明的地方不能够对其进行定义,即,不能够给出其具体的实现2 该函数在其继承的函数中必须要实现,即,要给出其具体的实现3 该函数所在的类不能够创建对象(即,不能够实例化),但是可以声明指针原创 2016-05-27 10:40:17 · 391 阅读 · 0 评论 -
函数参数名后面加const的意义
const int* i=0; 代表i是常量,里面的值不能够变int* const i=; 代表指针i是常量,所指的内容可以修改const对象只能调用const成员函数(所谓const成员函数,是指在函数的参数括号后面添加const的函数,比如int a(int i) const{})。 const对象的值不能被修改,在const成员函数中修改原创 2016-05-27 10:38:56 · 6053 阅读 · 0 评论 -
类声明和定义中const、inline、默认参数、explicit、static、virtual的出现频率
1 在类申明中,在形参表之后添加关键字const,使成员函数变成常量(我们可以理解为将this指定指定为常量),如此便不能通过成员函数来修改对象的数据成员,无论是共有的还是私有的。例如double avg_price() const;该函数avg_price()不能更改对象的任何数据成员。需要强调一点的是:const关键字必须同时出现在类的申明和定义中,若只出现一次,将会报错。2 如果类的原创 2016-05-27 10:37:46 · 646 阅读 · 1 评论 -
变量存储区
静态存储区: 全局,静态变量之类的都在静态存储区域分配栈: 执行函数时,函数内部局部变量的存储单元在栈上创建,函数执行完时自动释放堆: 堆上分配也叫动态内存分配,程序在运行的时候用malloc或new申请原创 2016-05-27 10:29:59 · 412 阅读 · 0 评论 -
explicit构造函数
关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。 C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 1 是个构造器 2 是个默认且隐含的类型转换操作符。 所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类原创 2016-05-27 10:19:19 · 404 阅读 · 0 评论 -
数据结构中的堆栈和内存中的堆栈
数据结构中的堆栈: 1 都是一种数据按序排列的数据结构,只能在一端对数据进行插入和删除 2 堆:队列优先,先进先出;栈,先进后出内存分配中的堆栈,在C++中内存分成5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区。 1 栈,就是那些有编译器在需要的时候分配,在不需要的时候自动清除的变量存储区。里面的变量基本上是局部变量、函数参数等,栈由系统自原创 2016-05-27 10:17:48 · 716 阅读 · 0 评论 -
C++中vector删除指定位置的元素
1、可以用erase方法删除vector指定位置的元素。2、例程:#include #include using namespace std;int main(int argc, char** argv){ std::vector vec; for(int i=0;i printf("10:%d\n",vec[10]); prin原创 2016-05-27 10:16:18 · 20018 阅读 · 0 评论 -
windows下简单的命令行
cmd下对应于Linux下的显示当前路径命令ped是cdcmd下对应于Linux下显示当前文件夹下所有的文件命令ls是DIR或dircmd下对应与Linux下切换文件夹名称是一样的,都是cd,但是如果要在几个分区,如C盘和D盘之间进行切换的话,直接输入E:,就可以了原创 2016-05-27 09:22:00 · 448 阅读 · 0 评论 -
opencv编译contrib部分
1 先在官网下载opencv2 在网址:https://github.com/Itseez/opencv_contrib下载contrib部分的代码3 下载cmake gui:http://www.cmake.org/cmake/resources/software.html然后按照以下步骤进行:打开cmake-gui在where is the source cod原创 2016-05-27 17:24:00 · 1485 阅读 · 0 评论 -
opencv中Mat的一些常见操作
opencv中的Mat由两个数据部分组成:1 矩阵头(包含矩阵的尺寸,存储方法,存储地址等信息),矩阵头的尺寸是常数值2 指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针以下操作会说明了矩阵的内存操作:Mat A,C;//只创建信息头部分A = imread();//这里为矩阵开辟内存Mat B(A);//使用拷贝构造函数,B和A的信息头原创 2016-05-18 17:58:16 · 762 阅读 · 0 评论 -
struct和typedef struct
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef:typedef struct Student { int a; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是struct Student的别名。Stu=转载 2016-06-29 17:03:13 · 426 阅读 · 0 评论 -
opencv的Filestorage,待学习
http://www.cnblogs.com/summerRQ/articles/2524560.html http://blog.csdn.net/sway_2012/article/details/23381135 http://www.cnblogs.com/liu-jun/p/3493063.html转载 2016-06-13 18:02:32 · 311 阅读 · 0 评论 -
C++11 的for_each、lambda表达式
C++STL的非变易算法(Non-mutating algorithms)是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。for_each用于逐个遍历容器元素,它对迭代器区间[first,last)所指的每一个元素,执行由单参数函数对象f所定义的操作。 原型:template<class InputIterator, class Function>转载 2016-06-29 12:02:30 · 4842 阅读 · 0 评论 -
C++中的count_if用法
函数原型编辑 template<class InputIterator, class Predicate> typename iterator_traits<InputIterator>::difference_type count_if( InputIterator _First, InputIterator _Last, Predicate _Pred原创 2016-06-29 11:50:27 · 3104 阅读 · 0 评论 -
通过txt读取文件
下面的程序,通过将需要读取的文件的文件名全部写在一个txt中,然后读取txt中的名字:// load sample list void LoadSampleList( const string &list_file, // sample list file vector<string> *sample_list // sample list) { ifstream fin(list_fil原创 2016-06-13 16:16:50 · 488 阅读 · 0 评论 -
随机数生成
C++ API:http://www.cplusplus.com/reference/random/uniform_int_distribution/C++11往库里加了不少良心设施,新版的随机数发生器就是其中之一。之所以需要全新的随机数设施想必是因为原来的太难用。事实呢?嗯,旧的设施真的很难用。旧式的随机数发生器沿用C的 Rand() 函数,这个函数会产生区间在\([0, \原创 2016-06-13 10:50:13 · 350 阅读 · 0 评论