cv::line 样例
时间: 2024-01-06 08:05:41 浏览: 78
下面是一个 cv::line 的样例代码,可以在图像中绘制一条蓝色的水平直线:
```
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("test.jpg"); // 读取图像
cv::line(image, cv::Point(0, image.rows/2), cv::Point(image.cols, image.rows/2), cv::Scalar(255, 0, 0), 2);
// 绘制水平直线,颜色为蓝色,宽度为2
cv::imshow("Line", image); // 显示图像
cv::waitKey(0); // 等待按键
return 0;
}
```
在上面的代码中,我们使用了 cv::Point 类型来表示线段的起点和终点。cv::Scalar 类型用来表示颜色,它的构造函数需要指定 BGR 三个通道的值。最后一个参数是线条的宽度。
该程序运行后,会在图像中绘制一条水平直线,如下图所示:
![cv::line 示例图](https://img-blog.csdn.net/20171019171232289?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hpdGdwdC9pbWFnZTMwLmpwZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
相关问题
如何遍历cv::LineIterator line
遍历 `cv::LineIterator` 的方法有两种:
1. 使用迭代器:可以使用类似于指针的方式来遍历像素,示例如下:
```cpp
cv::Mat image = cv::imread("test.jpg");
cv::Point pt1(10, 10), pt2(200, 200);
cv::LineIterator it(image, pt1, pt2, 8);
for (int i = 0; i < it.count; i++, it++) {
cv::Vec3b pixel = (*it); // 获取当前像素的值
// 对像素进行操作
}
```
上述代码中,`it` 就是 `cv::LineIterator` 类型的迭代器,`it.count` 表示沿直线需要遍历的像素个数,`(*it)` 表示获取当前像素的值。
2. 使用指针:可以将 `cv::LineIterator` 转换为指向像素值的指针,示例如下:
```cpp
cv::Mat image = cv::imread("test.jpg");
cv::Point pt1(10, 10), pt2(200, 200);
cv::LineIterator it(image, pt1, pt2, 8);
cv::Vec3b *ptr = (cv::Vec3b *) it.ptr;
for (int i = 0; i < it.count; i++, ptr++) {
cv::Vec3b pixel = (*ptr); // 获取当前像素的值
// 对像素进行操作
}
```
上述代码中,`it.ptr` 表示获取指向当前像素值的指针,`cv::Vec3b *` 表示指向 `Vec3b` 类型的指针,`(*ptr)` 表示获取当前像素的值。
需要注意的是,使用 `cv::LineIterator` 遍历像素时,需要确保沿直线的所有像素都在图像范围内,否则会导致访问越界。
cv::line 详解
`cv::line` 是 OpenCV 中用于绘制线条的函数之一。其函数原型如下:
```cpp
void cv::line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)
```
其中,
- `img`:输入输出参数,表示要绘制线条的图像;
- `pt1`:输入参数,表示线条的起点,类型为 `cv::Point`;
- `pt2`:输入参数,表示线条的终点,类型为 `cv::Point`;
- `color`:输入参数,表示线条的颜色,类型为 `cv::Scalar`,可以通过 `cv::Scalar(B, G, R)` 的方式设置颜色,其中 B、G、R 分别代表蓝色、绿色、红色的值;
- `thickness`:输入参数,表示线条的宽度,类型为 `int`,默认值为 1;
- `lineType`:输入参数,表示线条的类型,类型为 `int`,默认值为 `LINE_8`,可以选择 `LINE_4` 或 `LINE_AA`;
- `shift`:输入参数,表示坐标点的小数点位数,类型为 `int`,默认值为 0。
使用 `cv::line` 函数可以在图像上绘制一条直线。例如,以下代码可以在一张黑色的图像上绘制一条红色的直线:
```cpp
cv::Mat img(512, 512, CV_8UC3, cv::Scalar(0, 0, 0)); // 创建一张黑色的图像
cv::line(img, cv::Point(100, 100), cv::Point(400, 400), cv::Scalar(0, 0, 255), 3); // 在图像上绘制一条红色的直线
```
绘制结果如下:
![line](https://img-blog.csdn.net/20180530211606679?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Jsb2c2NjY2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)