
C/C++
文章平均质量分 94
-circle-
这个作者很懒,什么都没留下…
展开
-
编译opencv库vs2017+opencv3.4.8+opencv_contrib+cuda10
因为要用到opencv的sift和surf函数,但是opencv3之后的版本已经将这些模块移到opencv_contrib里,因此需要自己编译opencv库。编译折腾了两天,其中还挺多要注意的,下面记录一下:1、gitlab上下载opencv3.4.8和opencv_contrib-3.4.8,注意二者版本要一致;2、安装cmake,我装的3.18.0;3、开始编译:编译时注意选择vs2017,并改为x64,我这默认是x86,不改是编不过的,因为cuda不支持x86; ffmpeg、m原创 2020-07-18 12:40:25 · 439 阅读 · 0 评论 -
基类中声明为virtual ,派生类中的同名函数
注:转载自http://blog.youkuaiyun.com/wuchuanpingstone/article/details/6880093 在c++中的继承中,如果基类声明了一个函数为虚函数,那么在派生类中不用声明同名函数为虚函数(不需要加virtual)也可以实现该函数为虚函数。 派生类继承了基类的属性,同名函数被视为与基类具有相同属性的函数。 如果基类为纯虚函转载 2016-01-21 10:23:29 · 1092 阅读 · 0 评论 -
c++ list, vector, map, set 区别与用法比较
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要转载 2015-12-03 11:11:29 · 486 阅读 · 0 评论 -
浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
转自:http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html一、Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来。 目前的人脸检测转载 2016-03-21 12:10:26 · 843 阅读 · 0 评论 -
template<class T>
参考 http://prglab.com/cms/pages/c-tutorial/advanced-concepts/templates.php函数模板( Function templates)模板是通用语言的特性,模板又叫参数化类型(parametrized types)。利用模板机制可以显著减少冗余信息,能大幅度地节约程序代码,进一步提高面向对象程序的可重用性和维护性转载 2016-03-10 15:33:35 · 1752 阅读 · 0 评论 -
CvMat,Mat和IplImage之间的转化和拷贝
1、CvMat之间的复制//注意:深拷贝 - 单独分配空间,两者相互独立 CvMat* a; CvMat* b = cvCloneMat(a); //copy a to b 2、Mat之间的复制//注意:浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用)Mat a;Mat b = a; //a "转载 2016-03-13 21:32:06 · 388 阅读 · 0 评论 -
c++中冒号(:)和双冒号(::)的用法
1.冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{unsigned char a:4;unsigned char c;} ; XXX(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。struct _XXX{_XXX转载 2016-11-18 17:56:12 · 267 阅读 · 0 评论 -
IpiImage图像与BYTE图像之间的转换
一、IplImage图像与BYTE图像在VC中的声明1、IplImage* iplImage;2、BYTE* data;二、 由IplImage*得到BYTE*图像数据:1、data = iplImage->imageDataOrigin; //未对齐的原始图像数据2、data = iplImage->imageData; //已对齐的图像数据三、转载 2016-11-15 21:28:34 · 941 阅读 · 0 评论 -
图像处理之Zhang Suen细化算法
转载自:http://blog.youkuaiyun.com/jia20003/article/details/52142992在二值图像处理特别是OCR识别与匹配中,都要通过对字符进行细化以便获得图像的骨架,通过zhang-suen细化算法获得图像,作为图像的特征之一,常用来作为识别或者模式匹配。一:算法介绍Zhang-Suen细化算法通常是一个迭代算法,整个迭代过程分为转载 2016-11-28 12:17:01 · 17735 阅读 · 5 评论 -
在头文件中定义函数体的缺点
在用CLI/C++开发Winform程序时,总是疑惑函数体能否写在头文件中,现在看来头文件的真正用处是实现“接口”,应该把函数体写在源文件中,而不是头文件中: 1、不利于代码理解和维护: 通常,头文件被用来唯一指定接口,且多少提供一些文档来说明如何使用在该文件中声明的组件。若把所有变量和函数的定义都写在头文件中,往往头文件异常的大,不利于代码理解;推荐把不同功能的函数分布在原创 2015-05-01 19:40:53 · 4729 阅读 · 0 评论 -
虚函数和纯虚函数的区别
转载自大牛:http://blog.youkuaiyun.com/hackbuteer1/article/details/7558868首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这转载 2017-07-13 16:23:24 · 291 阅读 · 0 评论 -
Unicode(UTF-8, UTF-16)令人混淆的概念
部分转载自: http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html部分转载自:http://www.qianxingzhem.com/post-1499.html部分转载自:http://blog.youkuaiyun.com/leftstrang/article/details/52450318部分转载自:http://bl...转载 2017-02-17 10:01:13 · 6615 阅读 · 0 评论 -
Caffe中实现卷积的计算
转载自:https://buptldy.github.io/2016/10/01/2016-10-01-im2col/CNN中的卷积操作卷积层是CNNs网络中可以说是最重要的层了,卷积层的主要作用是对输入图像求卷积运算。如下图所示,输入图片的维数为[c0,h0,w0][c0,h0,w0] ;卷积核的维数为[c1,c0,hk,wk][c1,c0,hk,wk转载 2017-10-27 18:10:05 · 527 阅读 · 0 评论 -
Linux下C语言实现CopyFile
Linux下C语言实现文件拷贝/* Function:copy file from file1 to file2 How to execute: ./copyfile file1 file2 (under Linux) Data:2007-05-09*/ #include /*fprintf(),stderr,转载 2017-10-24 15:39:11 · 2693 阅读 · 0 评论 -
C++ explicit关键字详解
转载自:https://www.cnblogs.com/ymy124/p/3632634.html首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数。它的作用是表明该构造函数是显示的, 而非隐式的。跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。那么显示声明的构造函数和隐式声转载 2017-11-29 18:26:13 · 316 阅读 · 0 评论 -
IplImage, CvMat, Mat 的关系
opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“图像”,opencv对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。在opencv2.0之前,opencv是完全用C实现的,但是,IplIm转载 2015-10-14 14:14:58 · 284 阅读 · 0 评论 -
DLL导出函数名
今天想调用一个dll,GetProcAddress返回值总是Null,通过GetLastError,推断是从DLL中找不到函数名,但是函数名明明是正确的,所以查到了以下资料,以供学习。经常使用VC6的Dependency查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系。VC++支持两转载 2015-11-12 17:25:27 · 1909 阅读 · 0 评论 -
Union关键字
union 关键字的用法与struct 的用法非常类似。union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。例子如下:union StateMachine{ char character; int number;转载 2014-05-04 16:57:15 · 478 阅读 · 0 评论 -
编程缩写规范
一、数据类型缩写规范string str int i char chr sbyte sb byte bt uint ui long l ulong ul float f double d bool b decimal dec 二、控件缩写规范转载 2015-01-27 10:53:01 · 1284 阅读 · 0 评论 -
.DLL、.LIB、.H文
转载自:http://blog.sina.com.cn/s/blog_a50d2d7401017wit.html1. DLL是Dynamic LinkLibrary的缩写,意为动态链接库。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。当某个应用转载 2014-12-25 11:31:56 · 1856 阅读 · 0 评论 -
函数指针和函数数组
转载自:http://blog.youkuaiyun.com/dragoniye/article/details/3537701 函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变转载 2014-12-11 16:47:51 · 360 阅读 · 0 评论 -
VC++的链接错误LNK2005
编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。造成LNK2005错误主要有以下几种情况:1. 重复定义全局变量情况A、 对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如转载 2015-02-06 17:10:08 · 471 阅读 · 0 评论 -
error MSB6006:"mt.exe" exited with code 31的解决办法
一、问题出现 用VS编译项目的时候,总是遇到error MSB6006: "mt.exe" exited with code 31.这个问题。具体错误如下:二、解决办法 设置project的属性Manifest Tool,把 “Input and Output”中的"Embed Manifest" 设置成No,具体操作如图:原创 2015-02-11 19:04:36 · 4395 阅读 · 0 评论 -
CLR中函数引用传递无法使用ref class成员变量的问题
之前遇到过这个问题,今天又被人问到了,所以研究了一下。 1、问题描述: 在CLR项目中的ref class中,想将函数的返回值放在函数的输入参数列表中,于是使用了函数的引用传递: 函数声明: bool GetVideoInfo(int & duration,int & fps,int & totalF,System:原创 2015-03-04 14:33:49 · 1540 阅读 · 1 评论 -
变量命名规范
为了代码清晰易懂,通常变量名采用一些著名的命名规则,主要有Camel标记法,Pastal标记法和匈牙利标记法。 Camel标记法采用首字母小写,接下来的单词都以大写字母开头的方法,如myName。 Pastal标记法采用首字母大写,接下来的单词都以大写字母开头的方法,如MyName。 匈牙利标记法是在Pastal标记法的基础上,变量名前面加上一转载 2015-03-26 19:46:37 · 569 阅读 · 0 评论 -
C#中Invoke 和 BeginInvoke 的区别(多线程调用Winform)
今天师弟问我SuperGridControl的线程安全问题,我查了一下资料,不知道下面方法是否能解决,但是感觉这个函数很不错,记下来以后试试。原文连接相关资料:Invoke 和 BeginInvoke 的真正涵义 、在多线程中如何调用WinformControl.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的转载 2015-03-18 20:53:10 · 7431 阅读 · 0 评论 -
C++中public,protected,private访问
第一:private, public, protected 访问标号的访问范围。private: 只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.其友元函数访问、3.子类的函数。但不能被该类的对象访问。public: 可以被1.该类中的函数、2.其友元函数访转载 2015-04-21 20:23:04 · 371 阅读 · 0 评论 -
extern “C” 的作用
extern c的用法转载 2015-09-07 10:10:26 · 353 阅读 · 0 评论 -
char 与 unsigned char的本质区别
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情转载 2015-09-30 10:38:40 · 375 阅读 · 0 评论 -
char字符运算
使用OpenCV对图像进行处理时,总会有一个疑问: 对char字符进行运算时,为什么它能转换成ascii码对应的十进制进行运算?char 型变量,实际上是1字节 整型。short int 是 2 字节 整型.long int 是 4 字节 整型.所以 char, short int, long int 都可以放在一起做整型运算。只是它们的数值许可范围转载 2015-11-11 16:10:02 · 2215 阅读 · 0 评论 -
向函数中传递指针和传递指针引用的区别
如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针;但 是对于传递指针应用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再 引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释转载 2015-10-27 14:41:49 · 3979 阅读 · 0 评论 -
C++ Vector的用法
C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板。标准库vector类型使用需要的头文件:#include 。vector 是一个类模板。不是一种数据类型,vector是一种数据类型。Vector的存储空间是连续的,list不是连续存储的。一、 定义和初始化vector转载 2014-05-04 17:55:55 · 477 阅读 · 0 评论