cv2.DIST_L1
时间: 2023-10-10 14:06:45 浏览: 90
`cv2.DIST_L1` 是 OpenCV 库中的一个常量,表示计算两点之间距离时使用的距离类型为曼哈顿距离(L1 距离)。在计算曼哈顿距离时,我们需要对两点的坐标差的绝对值进行求和,即:
$$\text{dist}(\text{p}_1, \text{p}_2) = |x_2-x_1| + |y_2-y_1|$$
其中,$\text{p}_1(x_1, y_1)$ 和 $\text{p}_2(x_2, y_2)$ 分别表示两个点的坐标。
在 `cv2.fitLine()` 函数中,`cv2.DIST_L1` 是一个可选的参数,表示拟合直线时使用曼哈顿距离作为距离度量。
相关问题
opencv 中的fitLine(std::vector<cv::Point2f>{P1, P2}, L1, cv::DIST_L2, 0, 0.01, 0.01);
`cv::fitLine` 是 OpenCV 中用于拟合一组点集合成一条直线的函数。它的定义如下:
```c++
void cv::fitLine(
InputArray points, // 输入的点集,可以是 `Mat`、`std::vector<Point>` 或 `std::vector<Vec2f>`
OutputArray line, // 输出的直线参数,是一个 4 维向量 `Vec4f`,表示直线的一般式参数 (a, b, c, d)
int distType, // 距离类型,可以是 `cv::DIST_L2`、`cv::DIST_L1`、`cv::DIST_L12` 或 `cv::DIST_FAIR`
double param, // 距离类型的参数,当 `distType` 为 `cv::DIST_L12` 时表示 $\alpha$,当 `distType` 为 `cv::DIST_FAIR` 时表示 $\rho$
double reps, // 估计直线的精度,当估计出的直线与真实直线的距离小于 `reps` 时认为是正确的直线
double aeps // 估计直线的精度,当估计出的直线的方向余弦与真实直线的方向余弦夹角小于 `aeps` 时认为是正确的直线
);
```
其中,`points` 表示输入的点集,可以是 `Mat`、`std::vector<Point>` 或 `std::vector<Vec2f>`,`line` 表示输出的直线参数,是一个 4 维向量 `Vec4f`,表示直线的一般式参数 `(a, b, c, d)`。`distType` 表示距离类型,可以是 `cv::DIST_L2`、`cv::DIST_L1`、`cv::DIST_L12` 或 `cv::DIST_FAIR`。`param` 表示距离类型的参数,当 `distType` 为 `cv::DIST_L12` 时表示 $\alpha$,当 `distType` 为 `cv::DIST_FAIR` 时表示 $\rho$。`reps` 和 `aeps` 分别表示估计直线的精度,当估计出的直线与真实直线的距离小于 `reps` 时认为是正确的直线,当估计出的直线的方向余弦与真实直线的方向余弦夹角小于 `aeps` 时认为是正确的直线。
在你的问题中,`fitLine` 的调用代码如下:
```c++
cv::fitLine(std::vector<cv::Point2f>{P1, P2}, L1, cv::DIST_L2, 0, 0.01, 0.01);
```
其中,`std::vector<cv::Point2f>{P1, P2}` 表示一个包含两个点 `P1` 和 `P2` 的 `std::vector<cv::Point2f>` 类型的变量。`L1` 是一个 `cv::Vec4f` 类型的变量,用于存储拟合出的直线参数。`cv::DIST_L2` 表示距离类型为欧式距离,`0` 表示距离类型参数为默认值,`0.01` 和 `0.01` 分别表示估计直线的精度参数 `reps` 和 `aeps`。
cv2.fitline
`cv2.fitLine()` 是 OpenCV 库中的一个函数,用于拟合给定点集的直线。它可以通过最小二乘法计算出最佳拟合直线的斜率和截距,并返回这条直线的一些参数。
函数原型如下:
```python
cv2.fitLine(points, distType, param, reps, aeps)
```
参数说明:
- `points`:要拟合的点集,必须是一个 N x 1 x 2 的三维数组,其中 N 表示点的个数,每个点由一个二维坐标表示;
- `distType`:距离类型,可以是 `cv2.DIST_L2` 或者 `cv2.DIST_L1`;
- `param`:直线是否需要被归一化的标志,可以是 `cv2.LINE_NORMAL` 或者 `cv2.LINE_FITTED`;
- `reps`:迭代次数,通常设置为 0;
- `aeps`:精度阈值,在每次迭代中,如果拟合出的新直线与上一次的直线的差距小于该阈值,就认为已经收敛,退出迭代。
函数返回一个四元组 `(vx, vy, x0, y0)`,其中 `(vx, vy)` 是拟合直线的向量,`(x0, y0)` 是该直线上的一个点。
阅读全文