C++面试题

一.static关键字的作用 1.修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。 2.修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,……

阅读全文

STL中的算法

STL算法部分主要由头文件,,组成。要使用 STL中的算法函数必须包含头文件,对于数值算法须包含,中则定义了一些模板类,用来声明函数对象。 STL中算法大致分为四类: 1、非可变序列算法:指不直接修改其所操作的容器内容的算法。 2、可变序列算法:指可以修改它们所操作的容器内容的算法。 3、……

阅读全文

hugo静态网站相关

1. hugo使用内嵌HTML的方法 hugo在默认的情况下无法显示markdown中内嵌的html,在生成的网页中可以看到html的内容被<!--raw HTML omitted-->替代了。原因是在2019年11月的hugo更新中,使用了goldmark作为了默认库,那么想要内嵌……

阅读全文

OpenCV最大熵分割

1. 最大熵是什么? 这里所说的熵是指信息熵,信息熵是来自于信息论的一个词,它是对系统所含信息的一种度量。通俗的讲,系统的不确定性越大,那么系统的信息熵就越大。反之,一个系统如果确定性高(系统越有序),那么整个系统的信息熵就越小。其数学定义表述如下: $$ H = -\int_{\-\infty}^{+\infty}p(x)log[p(x)]dx $$ 上式中,$p(x)$ 表示灰……

阅读全文

OpenCV最大间方差分割

OpenCV中其实有对OTUS算法的实现,threhold()函数最后一个参数可以指定使用OTUS算法。 1、最大间方差(OTUS)算法的描述 和均值迭代算法相似,OTUS算法也是利用图像的直方图进行的。OTUS算法的思想是选取一个阈值$T, T \in [0,m-1]$,$m$为图像的灰度级……

阅读全文

OpenCV均值迭代分割

【题外话】:之前在博客中写过一篇“区域生长”的博客,区域生长在平时经常用到,也比较容易理解和代码实现,所以在很多情况下大家会选择这种方法。但是区域生长有一个最致命的点就是需要选取一个生长的种子点。 为了交流学习,同时也为了后面查阅方便,准备陆续将基于直方图的几种分割算法加以总结。 1……

阅读全文

OpenCV区域生长算法

1.理论基础 区域生长算法的基本思想是将有相似性质的像素点合并到一起。对每一个区域要先指定一个种子点作为生长的起点,然后将种子点周围领域的像素点和种子点进行对比,将具有相似性质的点合并起来继续向外生长,直到没有满足条件的像素被包括进来为止。这样一个区域的生长就完成了。这个过程中有几……

阅读全文

C#中结构体定义并转换字节数组

最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换;由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性,这一点非常重要。 ​ 首先是结构体定义,一些基本的数据类型,C#与C++都是可以匹配的:……

阅读全文

图像插值运算总结

图像插值就是利用已知邻近像素点的灰度值(或RGB图像中的三色值)来产生未知像素点的灰度值,以便由原始图像再生出具有更高分辨率的图像。图像插值常常用在图像的放缩,旋转等变换中。常用的插值运算有三种:最邻近插值、双线性插值和立方卷积插值(cubic运算)。假设变换(放缩,旋转等等)前……

阅读全文

BMP图像编码格式

BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。 1、文件头 BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息,一共包含14个字节。 例如:下图是个一个位图文件的二进制编码: 1-2字节:文件类型,必须是BM,十六进制中则是0x4d42; 3-6字节:位……

阅读全文