- 博客(82)
- 资源 (33)
- 收藏
- 关注
原创 服务器开发系列(三)——Linux与Windows操作系统基础功能对比
服务器开发系列文章中,关于操作系统基础功能的介绍,通过对比Linux和Windows系统在各方面的情况,来加深对各种操作系统的认知和使用水平。
2022-08-19 10:09:18 1018
原创 如何查看编译的OpenCV库的加速性能
这里主要展示如何查看编译的OpenCV库的性能:#include <iostream>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;int main() { cout << "OpenCV的编译信息:" << endl; cout << cv::getBuildInformation() << endl; cout <&l
2021-09-09 22:15:23 347
原创 OpenCV CMake MSVC x86编译记录
一、背景官方提供的OpenCV编译包是x64的,且没有集成contrib包中的功能,由于平时需要的是x86的OpenCV包,且想要使用contrib中的轮子,所以需要自行编译OpenCV。为什么要用OpenCV的C++库而不用opencv_python,就是为了速度和工业化部署。OpenCV中主要的加速手段有:SIMD、IPP、OpenCL、CUDA、Halide,以及多线程并行。由于本人GPU相关功能全部不使用OpenCV实现,所以在编译时OpenCL、CUDA相关功能全部取消,而Halide现在Op
2021-09-03 10:54:08 1260 1
转载 机器视觉的视频压缩传输
本代码主要实现的是利用网络传输图片,用在我的树莓派项目之上。该项目在PC上运行服务端,树莓派上运行客户端,两者连接到同一局域网中,修改代码中的IP地址,就可以实现将树莓派采集到的图像数据实时传输到PC端。先运行服务端代码,然后运行客户端代码即可。树莓派摄像头使用的是普通的USB摄像头,并且在树莓派上安装了opencv,在树莓派上安装opencv的过程可以参考https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-p
2021-05-18 21:59:24 333
原创 类型转换
一、隐式类型转换在C++中,某些类型之间有关联。如果两种类型有关联,那么程序需要其中一种类型的运算对象时,可以用另一种关联类型的对象或值来替代,则这两种类型是可以相互转换的。如果类型转换是自动执行,无需程序员介入的,则被称为隐式转换(implicit conversion)。在以下情况中,编译器会自动进行类型转换:(1)在大多数表达式中,比int类型小的整型值首先提升为较大的整数类型;(2)在判断条件中,非布尔值转换成布尔类型;(3)初始化过程中,初始值转换成变量的类型;在赋值语句中,右侧运算对象
2020-11-17 14:22:31 506
原创 lambda表达式
一、定义一个lambda表达式表示一个可调用的代码单元,可以将其理解为一个未命名的内联函数。与任何函数类似,一个lambda具有一个返回类型、一个参数列表和一个函数体。但与函数不同,lambda可能定义在函数内部。lambda表达式的具体形式如下:[capture list](parameter list)->return type {function body}其中,capture list是一个lambda所在函数中定义的局部变量的列表(通常为空);return type、paramete
2020-11-10 08:49:15 909
原创 智能指针
一、new和deleteC++定义了两个运算符来分配和释放动态内存。运算符new分配内存,delete释放new分配的内存。相对于智能指针,使用这两个运算符管理内存非常容易出错。在新标准下,使用new分配动态内存时,可使用{}来初始化对象。出于与变量初始化相同的原因,对动态分配的对象进行初始化通常是个好主意。一个动态分配的const对象必须进行初始化。虽然不能创建一个大小为0的静态数组对象,但当n等于0时,调用new[n]是合法的,即:char arr[0]; // 错误 不能定义长度为0的数组
2020-11-03 17:04:38 631
原创 STL中的numeric头文件和valarray头文件
一、numericSTL中的numeric头文件中定义了一组对数值序列执行特定操作的算法。由于这些算法的灵活性,它们也可适用于其他类型的序列。numeric中的函数包括:(1)accumulate(),将指定范围内的元素按照给定的函数进行计算,并将这些计算结果累加到给定的初始值上,并返回最终的计算结果,时间复杂度为O(N);(2)adjacent_difference(),将指定范围内的元素,其中第一个位置将原始元素复制到相应位置,其他位置将其与前一位置的差值复制到相应位置,时间复杂度为O(N);
2020-10-26 18:14:10 323 1
原创 STL中的algorithm头文件
STL中的algorithm头文件头定义了一组专门用于范围元素的函数。范围元素是可以通过迭代器或指针访问的任何对象序列,例如数组或某些STL的容器实例。但需注意,算法通过迭代器直接对值进行操作,不会以任何方式影响或改变容器的结构(它从不影响容器的大小或存储分配)。algorithm中的函数可分为9类:1.不修改范围内元素的操作:(1)all_of(),测试范围内元素是否都满足指定的条件;(2)any_of(),测试范围内元素是否至少有一个满足指定的条件;(3)none_of(),测试范围内元素是
2020-10-26 12:02:31 3235 1
原创 数据结构——位集合(bitset)
位集合(bitset)用来方便地管理一系列的bit位,其只能存储值为0或1,true或false的值。该类模拟一个bool元素数组,但针对空间分配进行了优化,通常每个元素只占用一个位。在位集合中,每个位位置都可以单独访问,例如,对于一个名为foo的给定位集合,表达式foo[3]访问其第四位,就像正则数组访问其元素一样。但是,因为在大多数C++环境中,没有元素类型是单个位,所以各个访问元素为特殊引用类型。位集合可以从整数值和二进制字符串构造,并转换为整数值和二进制字符串;也可以以二进制格式直接从流中提取。
2020-10-26 10:11:08 883
原创 数据结构——关联容器
一、关联容器定义关联容器支持高效的关键字查找和访问。两个主要的关联容器(associative container)类型是map和set。map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字:set支持高效的关键字查询操作——即检查一个给定关键字是否在set中。在某些文本处理的过程中,可以用一个set来保存想要忽略的单词。而字典则是一个很好的使用map的例子:可以将单词视为关键字,将单词释义视为值。在STL中提供
2020-10-25 17:18:05 564
原创 数据结构——哈希表
一、哈希的定义哈希技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。我们把这种对应关系f称为哈希(hash)函数,也称为散列函数。采用哈希技术将记录存储在一块连续的存储空间中,则这块连续存储空间称为哈希表(hash table)。哈希表的关键值通过哈希函数映射到数组上,查找时通过关键值直接访问数组。哈希技术既是一种存储
2020-10-25 14:46:09 339
原创 数据结构——图
图(graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。在图中,数据元素称为顶点(vertex)。在图中,任意两个顶点之间都有可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。若顶点vi到vj之间的边没有方向,则称这条边为无向边(edge),用无序偶对(vi,vj)来表示。若从顶点vi到vj的边有方向,则称这条边为有向边,也称为弧(arc)。用有序偶<vi,vj>来表示,vi称为弧尾(ta
2020-10-22 22:37:33 1737 1
原创 数据结构——字符串
一、标准字符串字符串(string)是由零个或多个字符组成的有限序列。字符串的比较是通过组成字符串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号(即ASCII值)。字符串的常见操作有:(1)将字符串指定为给定值;(2)将给定字符串复制到另一字符串;(3)清空字符串字符;(4)判断字符串是否为空;(5)返回字符串的长度;(6)比较两个字符串;(7)将两个字符串拼接成一个新的字符串;(8)提取字符串的一部分作为新的字符串;(9)在一个字符串中查找另一个给定字符串是否
2020-10-21 22:30:35 845
原创 数据结构——树
一、树树是n(n≥0)个结点的有限集合。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又有一棵树,并且称为根的子树。结点拥有的子树数称为结点的度(degree)。度为0的结点称为叶结点(leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。除根结点之外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。树中结点的最大层次称为树的深度
2020-10-20 22:20:46 622
原创 数据结构——顺序容器
一个容器就是一些特定类型对象的集合。顺序容器为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。所有顺序容器都提供了快速顺序访问元素的能力。但这些容器在以下方面都有不同的性能折中:(1)向容器添加或从容器中删除元素的代价;(2)非顺序访问容器中元素的代价。STL中一共提供了6种顺序容器:(1)array,固定大小数组。支持快速随机访问。不能添加或删除元素。(2)vector,可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很
2020-10-18 19:08:01 557
原创 数据结构——查找
查找是指在数据集合中寻找满足某种条件的数据元素的过程。用于查找的数据集合则称为查找表(search table)。查找表中的数据元素类型是一致的,并且有能够唯一标识出元素的关键字。如果从查找表中找出了关键字等于某个给定值的数据元素,则称为查找成功,否则称为查找不成功。通常对查找表有4种操作:(1)查找:在查找表中查看某个特定的记录是否存在;(2)检索:查找某个特定记录的各种属性;(3)插入:将某个不存在的数据元素插入到查找表中;(4)删除:从查找表中删除某个特定元素。如果对查找表只执行前两种
2020-10-17 17:41:57 362
原创 数据结构——排序算法
给定一个n个元素的线性表(a0,a1,…,an-1),排序算法返回这个序列重新排列的结果(A0,A1,…,An-1),满足A0≤A1≤…≤An-1。这里的小于等于号可以替换为其他比较符号。根据排序过程中元素是否完全保存在内存中,可以将算法分为内部排序(internal sort)和外部排序(external sort)。对于一个排序算法,如果任意两个元素ai和aj在排序前的线性表中满足条件i<j且ai=aj,在排序后ai仍然在aj之前,则称这个排序算法为稳定排序(stable sort),否则称这
2020-10-13 10:30:44 317
原创 makefile的编写贴士
最基本的Makefile中包含了一系列形式如下的规则。每一条规则的命令前,必须要有一个制表符\t。目标: 依赖1 依赖2 …命令例如:array.o: array.c array.h gcc -c -o array.o array.cPoint.o: Point.cpp Point.h g++ -c Point.cpp其表示生成的文件的目标代码文件array.o,它依赖于array.c和array.h。当我们在命令行中执行make array.o时,根据这一规则,如果arra
2020-10-10 21:05:12 145
原创 C语言指针资料汇总
一、标准指针指针类型的大小由系统的编译器位数决定,一般占8个字节。指针的类型,就代表存储的数据类型,影响寻找多长字节的数据。指针的值(即地址)应属于下列4种状态之一:(1)指向一个对象(2)指向紧邻对象所占空间的下一个位置(3)空指针,意味着指针没有指向任何对象(4)无效指针,也就是上述情况之外的其他值对所有的指针变量进行显式的初始化是种好的做法。初始化的方法有:(1)使它指向现有的内存;(2)给它分配动态内存。一般来说,指针都是初始化为NULL的,但对NULL指针进行解引用会出现错误。因此
2020-09-13 19:28:49 501 1
原创 C语言文件操作
C语言获得的文件,是使用FILE结构体进行定义的。scanf是fscanf对stdin的特化,printf是fprintf对stdout的特化,perror是fprintf对stderr的特化。C语言对文件操作有2种方式:(1)文本文件(也就是字符文件),可使用函数fprintf,fscanf,fgets,fgetc,fputs,fputc(2)二进制文件(即其数据是数组、结构体等非字符型复杂数据),可使用函数fread,fwrite文件操作的模式包括:(1)“r”读模式(2)“w”写模式(
2020-09-13 16:34:32 168
原创 第6章 函数
一个典型的函数定义包括以下部分:返回类型、函数名字、由0个或多个形参组成的列表以及函数体。函数的调用完成2项工作:(1)用实参初始化函数对应的形参(2)将控制权转移给被调用函数,此时主调函数的执行被暂时中断,被调函数开始执行为了与C语言兼容,对于没有形参的函数,在其参数列表中添加void关键字,如:void fun(void);函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。函数声明也称作函数原型。自动对象和局部静态对象(1)对于普通局部变量对应的对象来说,当函数的
2020-09-10 22:54:46 142
原创 第5章 语句
for语句中的init-statement可以定义多个对象,但是其只能有一条声明语句,因此,所有变量的基础类型必须相同。范围for语句,即:for (declaration: expression){ statement;}其等价于如下传统for语句:for (auto beg=v.begin(), end=v.end(); beg!=end; ++beg){ auto &r = *beg; // statement}如果需要对序列中的元素执行写操作,循环变量必须声明成引
2020-09-08 22:51:56 187
原创 C语言代码规范
一、排版1.相对独立的程序块之间、变量说明之后必须添加空行。2.较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。paRam->srcDstCIdx = (pXferParams->cDstOffset << 16) | pXferParams->cSrcOffset;3.不允许把多个短语句写在一行中,即一行只写一条语句。rect.length
2020-09-07 15:53:18 2812
原创 C语言中的安全输入、输出和字符串处理
C语言中,从bash获取输入和输出的类型可分为数字、字符和字符串3类。虽然使用scanf()、getchar()是危险的,但从bash获取输入数字和字符还是只能使用该函数。在使用scanf()获取数字和字符时,会遇到2个问题:(1)输入的内容与格式符不匹配(2)缓冲区中剩余字符的处理为解决上述问题,在使用scanf()前先使用printf()函数提示输入信息,在scanf()中只使用%d,%f,%c控制符,而不使用其他控制符,scanf()后对缓冲区和非法输入进行处理。例如:// 一次读取一个数
2020-09-07 11:29:38 1781
原创 第4章 表达式
可以做一个简单的归纳:当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。在需要右值的地方可以用左值来代替,但是不能把右值当成左值(也就是位置)使用。当一个左值被当成右值使用时,实际使用的是它的内容(值)。如果表达式的求值结果是左值,decltype作用于该表达式(不是变量)得到一个引用类型。有4种运算符明确规定了运算对象的求值顺序:(1)逻辑与(&&)运算符,从左到右(2)逻辑或(||)运算符,从左到右(3)条件(?:
2020-09-06 19:40:22 146
原创 第3章 字符串、向量和数组
位于头文件中的代码,一般来说不应该使用using声明。这是因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。string类型的s1+s2返回的是s1和s2字符串的拼接结果。有时我们希望能在最终得到的字符串中保留输入时的空白符,这时应该用getline函数代替原来的>>运算符。器从给定的输入流中读入内容,直到遇到换行符为止。如果输入真的一开始就是换行符,那么得到的结果就是一个空string。string对象的比较:
2020-09-05 22:39:28 95
真实世界的Python仪器监控.part2
2017-09-26
真实世界的Python仪器监控.part1
2017-09-26
机器学习实战.part2
2017-09-26
机器学习实战.part1
2017-09-26
机器学习系统设计
2017-09-26
机器学习实践指南 案例应用解析 代码及资源
2017-09-26
Python数据分析基础教程 NumPy学习指南
2017-09-26
Python绝技:运用Python成为顶级黑客
2017-09-26
Python基础教程
2017-09-26
Python黑帽子 黑客与渗透测试编程之道
2017-09-26
Python Cookbook(第2版)中文版.part2
2017-09-26
Python Cookbook(第2版)中文版.part1
2017-09-26
树莓派学习指南(基于Linux)
2017-09-25
爱上Raspberry Pi
2017-09-25
RaspberryPi用户指南
2017-09-25
RaspberryPi入门指南
2017-09-25
数据分析:R语言实战
2017-09-25
Python灰帽子:黑客与逆向工程师的Python编程之道
2017-09-25
R语言实战 R in Action
2017-09-25
R语言编程艺术
2017-09-25
用Python写网络爬虫
2017-09-25
机器学习实践指南 案例应用解析
2017-09-25
Python网络数据采集
2017-09-25
Python灰帽子 黑客与逆向工程师的Python编程之道
2017-09-25
Python高手之路
2017-09-25
OpenCV3计算机视觉Python语言实现
2017-09-25
OpenCV3计算机视觉Python语言实现 代码
2017-09-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人