OpenCV(十四):绘制直线

基础函数

在 OpenCV(C++ / Python)中,绘制直线使用函数

c++接口:

c++ 复制代码
void cv::line(
    cv::InputOutputArray img,   // 要绘制的图像
    cv::Point pt1,              // 起点
    cv::Point pt2,              // 终点
    const cv::Scalar& color,    // 线条颜色 (B, G, R)
    int thickness = 1,          // 线宽
    int lineType = LINE_8,      // 线型
    int shift = 0               // 坐标小数位数(通常为0)
);

Python 接口:

python 复制代码
cv2.line(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)

参数详解

参数 含义 示例
img 要绘制的图像(numpy 数组 / cv::Mat) img = np.zeros((400, 400, 3), np.uint8)
pt1 起点坐标 (x1, y1)cv::Point(x1, y1)
pt2 终点坐标 (x2, y2)cv::Point(x2, y2)
color 线条颜色,BGR 格式 (255, 0, 0) 表示蓝色
thickness 线宽(像素) 123...
lineType 线型 cv2.LINE_4(4连通)、cv2.LINE_8(8连通)、cv2.LINE_AA(抗锯齿)
shift 坐标缩放精度(用于小数坐标) 一般设为 0

示例

python示例

python 复制代码
import cv2
import numpy as np

# 创建黑色画布
img = np.zeros((400, 400, 3), dtype=np.uint8)

# 绘制一条红色线段
cv2.line(img, (50, 50), (350, 350), (0, 0, 255), 2)

# 绘制一条绿色线段(抗锯齿)
cv2.line(img, (50, 350), (350, 50), (0, 255, 0), 3, cv2.LINE_AA)

cv2.imshow("Lines", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

c++示例

c++ 复制代码
#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat img = Mat::zeros(Size(400, 400), CV_8UC3);

    // 红色直线
    line(img, Point(50, 50), Point(350, 350), Scalar(0, 0, 255), 2);

    // 绿色抗锯齿直线
    line(img, Point(50, 350), Point(350, 50), Scalar(0, 255, 0), 3, LINE_AA);

    imshow("Lines", img);
    waitKey(0);
    return 0;
}

进阶用法

绘制多条线

可以在循环中多次调用 cv::line()

python 复制代码
for i in range(0, 400, 40):
    cv2.line(img, (i, 0), (i, 399), (255, 255, 0), 1)

生成类似网格的效果。

绘制垂直或水平线

python 复制代码
# 水平线
cv2.line(img, (0, 200), (400, 200), (255, 0, 0), 2)

# 垂直线
cv2.line(img, (200, 0), (200, 400), (255, 0, 0), 2)

使用浮点坐标(shift 参数)

如果需要亚像素精度的坐标(例如检测出的浮点线位置):

复制代码
cv::line(img, cv::Point2f(100.5f, 50.5f), cv::Point2f(300.5f, 150.5f), cv::Scalar(0,255,0), 1, cv::LINE_AA);

结合 HoughLines 绘制检测到的直线

python 复制代码
edges = cv2.Canny(gray, 50, 150)
lines = cv2.HoughLines(edges, 1, np.pi/180, 100)

for rho, theta in lines[:,0]:
    a, b = np.cos(theta), np.sin(theta)
    x0, y0 = a*rho, b*rho
    x1, y1 = int(x0 + 1000*(-b)), int(y0 + 1000*(a))
    x2, y2 = int(x0 - 1000*(-b)), int(y0 - 1000*(a))
    cv2.line(img, (x1,y1), (x2,y2), (0,0,255), 2)

总结

功能 函数 特点
绘制直线 cv2.line() / cv::line() 可设置颜色、线宽、抗锯齿
多线绘制 循环调用 适合可视化检测结果
精确绘制 支持浮点坐标(shift) 亚像素精度
相关推荐
数智工坊1 分钟前
【Inner Monologue论文阅读】: 首次将大语言模型嵌入机器人控制闭环,实现自我反思和动态行为调整
论文阅读·人工智能·算法·语言模型·机器人·无人机
AI帮小忙8 分钟前
Debian/Ubuntu 系linux操作系统Kali Linux 2026 里安装 Hermes Agent
人工智能
乌恩大侠11 分钟前
基站正在成为 AI 计算节点:NVIDIA Aerial 推动 RAN 架构重构
人工智能·重构·架构
钓了猫的鱼儿15 分钟前
基于深度学习+AI的水下目标目标检测与预警系统(Python源码+数据集+UI可视化
人工智能·深度学习·智能手机
Ting-yu19 分钟前
Spring AI Alibaba零基础速成(6) ---- 向量化
数据库·人工智能
YUDAMENGNIUBI21 分钟前
day29_NLP概念与文本预处理
人工智能·自然语言处理
南屹川22 分钟前
【安全】代码安全审计与防护实践
人工智能
深开鸿24 分钟前
福田区全栈式鸿蒙AI数智机关入选全市首批OR示范应用项目,深开鸿筑牢政务安全底座
人工智能·openharmony·政务
进度猫24 分钟前
八款项目管理软件对比:功能、局限与适用团队
人工智能·项目管理·产品经理·甘特图·项目管理软件
Cosolar35 分钟前
收藏备用!2026 年所有主流 RAG 开源项目都在这里了
人工智能·面试·llm