OpenCV图像处理1-使用高通滤波进行边缘检测
高通滤波: 通常使用来检测边缘
常见算子
sobel算子
Scharr算子 (更敏感/细致)
Laplacian(拉普拉斯)算子 (对噪声较敏感,一般搭配其他操作)
具体代码例子
1 | import matplotlib.pyplot as plt |
OpenCV图像处理2-使用低通滤波进行去噪
低通滤波: 通常使用来去噪
常见滤波类型
均值滤波
高斯滤波 (权重与距离相关)
中值滤波
顾名思义取中值
具体代码例子
高斯的模糊/去噪效果
1 | # Read in the image |
恢复git stash误删的内容
恢复git stash误删的内容
不小心使用 git drop stash
误删了暂存的内容 (或是 git stash pop
后丢失),怎么恢复?
其实drop后并没有真正删除暂存的内容,而是移除了对它的引用,所以通过一些操作是可以找回的。
模拟误删场景
git st
查看当前修改1
2
3
4
5
6
7
8
9
10
11
12
13On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: calibration/adjust_result.json
modified: calibration/config.json
modified: calibration/src/rd_test.cc
modified: pose_estimation/CMakeLists.txt
modified: test/CMakeLists.txt
modified: test/multiple_sensors.json
modified: test/src/test_multiple_sensors.ccgit stash
暂存修改1
2Saved working directory and index state WIP on master: 4d74f8a fix spell
HEAD is now at 4d74f8a fix spellgit stash list
查看暂存内容列表1
stash@{0}: WIP on master: 4d74f8a fix spell
git stash drop stash@{0}
移除暂存内容1
Dropped refs/stash@{0} (0b45536f1ce7e859a85f1459d6ae34fc6cdc4039)
Effective C++ 笔记
Udacity自动驾驶入门课笔记
无人驾驶第一课:从 Apollo 起步
概览
硬件
- 线控驾驶车辆:可通过电子控制的基础车辆,而不仅仅用过实体方向盘、油门踏板、刹车踏板来控制。
- 控制器区域网络 (CAN) : 车辆的内部通信网络。计算机系统通过CAN卡连接汽车内部网络,发送加速、制动和转向信号。
- 全球定位系统 (GPS) : 通过绕地卫星接收信号,帮助我们确定所处位置信息。
- 惯性测量装置 (IMU, Inertial Measurement Unit) : 通过跟踪位置、速度、加速度和其他因素,测量车辆的运动和位置。
- 激光雷达 (LiDAR) : 由一组脉冲激光器组成,可360度扫描车辆周围,这些激光束的反射形成了可用于了解环境的点云。可用于检测障碍物和检测其他车辆的速度,分辨率低,但成本低且不受天气和照明条件影响。
- 摄像头捕获图像数据,可使用计算机视觉来了解周围环境,例如检测交通灯。
OpenCV Mat像素的遍历方法
OpenCV像素遍历常用的几种方法
以从 organized 的点云提取 RGB 信息为例
动态地址at
基于Mat对象的随机像素访问 API 实现,通过行列索引方式遍历每个像素值。这种方法速度较慢,不太适合用于像素遍历。
1 | void extract_1(const pcl::PointCloud<PointT>::Ptr cloud, cv::Mat &image) |
C++ 类构造函数
构造函数
类的构造函数是类的一种特殊的成员函数,用于创建类的新对象和初始化自定义类成员。
- 构造函数具有与类相同的名称,没有返回值,也不返回
void
。 - 可以根据需要定义多个重载构造函数,以各种方式自定义初始化。
- 构造函数可用于为某些成员变量设置初始值。
- 通常构造函数具有公共可访问性,因此外部代码可以调用其创建类的对象,但也可以将构造函数声明为 protected 或 private 。
- 构造函数可以声明为
inline
,explicit
,friend
或constexpr
- 构造函数可以初始化已声明为
const
,volatile
或者const volatile
的对象,该对象在构造完成后变为const
- 如果没有自己声明,编译器将为一个类声明 (编译器版本的) 默认构造函数、复制构造函数、复制赋值操作符和析构函数。所有这些函数都是
public
且inline
的。
C++ push_back和emplace_back的区别
push_back()
向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素)。而
emplace_back()
在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。
事实上,大多数情况下二者没有区别,只有在少数情况下 emplace_back()
效率更高。主要是 emplace_back()
支持 in-place construction
。