当前位置: 首页 > news >正文

OpenCV(十四):绘制直线

基础函数

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

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 接口:

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示例

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++示例

#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()

for i in range(0, 400, 40):cv2.line(img, (i, 0), (i, 399), (255, 255, 0), 1)

生成类似网格的效果。

绘制垂直或水平线

# 水平线
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 绘制检测到的直线

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*rhox1, 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)亚像素精度
http://www.dtcms.com/a/532253.html

相关文章:

  • 支持支付宝登录的网站建设wordpress指定分类文章列表
  • Halcon卡尺 Measure_pos原理与实现(C++ 和Python版本,基于OpenCV)
  • 在线课程网站开发任务书邢台 网站建设
  • 专业做英文网站如何看出一个网站优化的是否好
  • PostgreSQL事务隔离级别详解
  • 从底层逻辑到实战落地:服务端与客户端负载均衡器的深度拆解
  • 笔试强训(十三)
  • 基于罗伊适应模型的产后抑郁家庭护理干预研究综述​
  • Bright Data 抓取浏览器API实战:助力高效完成定向大规模数据稳定采集
  • 合肥市做效果图的网站最适合新人的写作网站
  • 关于做视频网站的一些代码南京网站制作公司怎么样
  • 6分钟制作TikTok游戏领域热门短视频分析AI Agent
  • 自由通讯的魔法:Go从零实现UDP/P2P 聊天工具
  • Cortex-M3-STM32F1 开发:(十二)HAL 库开发 ➤ SysTick 系统滴答定时器
  • go-ethereum core之以太网虚拟机EVM
  • 自己怎么免费做网站网站开发 合同
  • 网站如何做脚注一般使用的分辨率的显示密度是多少dpi )
  • 嵌入式开发中ln命令使用指南
  • C++模板进阶及特化实战指南
  • zenm自己做网站淮北建设网
  • 网站title keyword descriptionwordpress 分类筛选
  • 网站系统设计目标企业融资方案范本
  • 《AI 应用层革命(二)——从应用到生态:当智能体开始重塑世界》
  • 使用 Python 元类与属性实现惰性加载:Effective Python 第47条
  • 环广西世巡赛开战!维乐Senso Prime 坐垫助你竞速
  • DeepSeek讲“南辕北辙”者的志向
  • 做网站在线视频如何添加湘潭网站seo
  • 智能文本抽取:通过OCR、自然语言处理等多项技术,将非结构化文档转化为可读、可分析的数据资产
  • 许昌哪个网站做苗木网站建设怎么让百度搜索到
  • 代码训练LeetCode(49)插入区间