V4L2接口编程
V4L2接口编程
官方文档连接:LinuxTV文档中心
参考链接:3-1.V4l2接口编程
基本使用为以下几个步骤:
打开设备
123456int fd = open("/dev/video0", O_RDWR);if(fd < 0){ perror("打开设备失败"); return -1;}
通过ioctl获取支持格式
1234567891011121314struct v4l2_fmtdesc v4fmt;v4fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;//指定类型v4fmt.index = 0;//指定获取格式的序列号(有的摄像头可能有多个可支持的格式)int ret = ioctl(fd, VIDIOC_ENUM_FMT, &v4fmt);//VIDIOC_ENUM_FMT命令,获得支持格式if(ret < 0){ perror("获取失败");}printf("index=%d\n&qu ...
寒武纪嵌入式笔试
这是一篇加密文章,内容可能是个人日常吐槽或者特殊技术分享。如果你确实想看,请与我联系。非亲友团勿扰。
Leetcode
一、复杂度
时间复杂度
nnn 表示数据规模
O(f(n))O(f(n))O(f(n)) 表示运行算法所需要执行的指令数,和 f(n)f(n)f(n) 成正比。
在学术界,严格地讲, O(f(n))O(f(n))O(f(n)) 表示算法执行的上界,如:归并排序算法的时间复杂度是 O(nlogn)O(nlogn)O(nlogn) 的,同时也是 O(n2)O(n^2)O(n2)
在业界,则使用 OOO 来表示算法执行的最低上界,所以一般不会说归并排序是 O(n2)O(n^2)O(n2) 的
例子:
有一个字符串数组,将数组中的每一个字符串按照字母序排序;之后再将整个字符串数组按照字典序排序。整个操作的时间复杂度?
假设最长的字符串长度为s;数组中有n个字符串
对每个字符串排序:O(slogs)O(slogs)O(slogs)
将数组中的每一个字符串按照字母序排序:O(n∗slog(s))O(n*slog(s))O(n∗slog(s))
将整个字符串数组按照字典序排序:O(s∗nlog(n))O(s*nlog(n))O(s∗nlog(n)) (n个字符串,比较nlognnlogn ...
数据结构与算法
一、基础排序
对于排序这个问题来说,最优的时间复杂度在O(N∗logN)O(N*logN)O(N∗logN)级别的
常用排序算法时间复杂度:
排序算法
平均时间复杂度
原地排序
空间复杂度
稳定性
冒泡排序
O(n2)O(n^2)O(n2)
O(1)O(1)O(1)
√
选择排序
O(n2)O(n^2)O(n2)
O(1)O(1)O(1)
×
插入排序
O(n2)O(n^2)O(n2)
√
O(1)O(1)O(1)
√
希尔排序
O(n3/2)O(n^{3/2})O(n3/2)
O(1)O(1)O(1)
×
快速排序
O(N∗logN)O(N*logN)O(N∗logN)
√
O(nlog2n)O(nlog_2n)O(nlog2n)
×
归并排序
O(N∗logN)O(N*logN)O(N∗logN)
×
O(n)O(n)O(n)
√
堆排序
O(N∗logN)O(N*logN)O(N∗logN)
√
O(1)O(1)O(1)
×
基数排序
O(n∗k)O(n*k)O(n∗k)
O(n+k)O(n+k)O(n+k)
√
稳定排序 ...
算法套路与框架
动态规划
动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等。
核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值。
首先,动态规划这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算
一定会具备「最优子结构」,才能通过子问题的最值得到原问题的最值
另外,虽然动态规划的核心思想就是穷举求最值,但是问题可以千变万化,穷举所有可行解其实并不是一件容易的事,只有列出正确的「状态转移方程」才能正确地穷举。但是在实际的算法问题中,写出状态转移方程是最困难的,这里提供一个思维框架,辅助思考状态转移方程:
明确 base case -> 明确「状态」-> 明确「选择」 -> 定义 dp 数组/函数的含义
1234567# 初始化 base casedp[0][0][...] = base# 进行状态转移for 状态1 in 状态1的所有取值: for 状态2 in ...
Linux更换home到其他硬盘
Linux更换home到其他硬盘
有时候有多块硬盘,而又因为一开始装系统的时候没有分配好空间,导致home目录在一块小硬盘上,这个时候需要把home分配到一个大点的硬盘上:
通过Ubuntu自带的Gparted将新硬盘进行分区和格式化
创建临时的home目录
1sudo mkdir /media/home
挂载硬盘到临时目录上
1sudo mount /dev/sda /media/home
同步home目录到新硬盘上
1sudo rsync -aXS /home/. /media/home/.
【注意】切换到root用户并执行以下步骤
12345678su# 备份home目录mv /home /home_old# 创建新的homemkdir /home# 取消之前的挂载并重新挂载到新的home上umount /dev/sdamount /dev/sda /home
查看新硬盘的UUID
123blkid# 查看其他盘(需要root)blkid /dev/sdx
复制新硬盘的UUID,并修改/etc/fstab文件
1sudo vim /etc/fsta ...
传感器融合
概念
信息融合分类
信息融合的分类方法有多种,其中较为通用的一种方法是依据信息的抽象层次将其划分为三类,即数据层融合、特征层融合、决策层融合
数据层融合:每个传感器分别对目标进行观测,然后将各传感器的原始数据或者经过简单滤波处理的目标数据传输给融合中心;随后,融合中心对各种传感器的测量数据进行融合处理,提取目标特征,识别目标身份
原始数据损失量较小,细节信息保存较为完整,精度相对较高
数据量较大,需要较多计算资源,实时性差
仅能对同质传感器融合
特征层融合:每个传感器需要对各自的原始数据进行处理,从中提取目标特征,然后再将数据传输给融合中心;随后,融合中心依据各传感器提取的目标特征进行数据关联,并进行目标数据融合与目标身份识别
数据线明显减小,实时性提高
融合中心接收到的信号存在一定损失,融合精度会下降
决策层融合:每个传感器需要对各自的原始数据进行预处理,提取目标特征并进行身份识别,然后再将目标识别的结果传输给融合中心;融合中心只需要对识别的目标进行关联以实现数据融合
损失部分数据,使得融合中心的处理速度更快,实时性更好
鲁棒性较好
论文
基于毫米波 ...
vim使用总结
vim使用总结
参考链接:
dofy/learn-vim: Vim 实操教程(Learning Vim)Vim practical tutorial.
iggredible/Learn-Vim: Learning Vim and Vimscript doesn’t have to be hard. This is the guide that you’re looking for 📖
wsdjeg/Learn-Vim_zh_cn
一、两种模式及常用快捷键
1.1 标准模式及命令模式
光标移动
单位级光标移动:
h 向左一字符
j 下一行
k 上一行
l 向右一字符
单词级光标移动:
w or W 向右移动到下一单词开头(word)
e or E 向右移动到单词结尾(end)
b or B 向左移动到单词开头
f+<char>:移动到当前行中 [char] 的下一个出现位置
F+<char>:移动到当前行中 [char] 的上一个出现位置
块级光标移动:
^:到第一个非空白字符
$:到行尾gg:到文档第一行
0:到行首(第 1 列)
& ...
C++感悟与积累
C++感悟与积累
各种初始化问题
默认初始化
指定义变量时没有指定初值时进行的初始化操作。这些变量被定义了而不是仅仅被声明(因为没有extern关键字修饰),而且没有显式的赋予初值。
特别的,如果采用动态分配内存的方式(即采用new关键字)创建的变量,不加括号时也是默认初始化,加了括号为值初始化。
如:
123456// 默认初始化int a;Sales_data myData;int *p=new int;// 值初始化int *p=new int();
变量的值与变量的类型与定义的位置有关系:
对于内置类型变量(如int,double,bool等),如果定义在语句块外(即{}外),则变量被默认初始化为0;如果定义在语句块内(即{}内),变量将拥有未定义的值
对于类类型的变量(如string或其他自定义类型),不管定义于何处,都会执行默认构造函数。如果该类没有默认构造函数,则会引发错误。因此,建议为每个类都定义一个默认构造函数(=default)。
值初始化
值初始化是值使用了初始化器(即使用了圆括号()或花括号{})但却没有提供初始值的情况。
注意,当不 ...
QT5入门
QT5入门
参考文档:QT学习之路2、QT5编程入门教程、QT wiki文档
一、下载及安装
1.1 下载
官网下载,但是国内一般比较慢
从上述链接进入后可以找到国内的镜像下载链接,这里推荐一个清华大学的
目录结构:
目录
说明
archive
各种 Qt 开发工具安装包,新旧都有(可以下载 Qt 开发环境和源代码)。
community_releases
社区定制的 Qt 库,Tizen 版 Qt 以及 Qt 附加源码包。
development_releases
开发版,有新的和旧的不稳定版本,在 Qt 开发过程中的非正式版本。
learning
有学习 Qt 的文档教程和示范视频。
ministro
迷你版,目前是针对 Android 的版本。
official_releases
正式发布版,是与开发版相对的稳定版 Qt 库和开发工具(可以下载Qt开发环境和源代码)。
online
Qt 在线安装源。
snapshots
预览版,最新的开发测试中的 Qt 库和开发工具。
一般来说 archive 和 official_rel ...