搬家公司网站建设价格,嘉兴信息发布终端多少钱一台,沈阳网站制作机构,青海城乡建设网站OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】210. 绘制直线也会有这么多坑#xff1f;
我不是标题党。
绘制直线当然是最简单的绘图#xff0c;能有什么坑呢#xff1f;不信的同学可以直接跳到注意事项。就算你是 OpenCV 大神#xff0c;如果这 10 个问题点…OpenCV 例程200篇 总目录 【youcans 的 OpenCV 例程200篇】210. 绘制直线也会有这么多坑
我不是标题党。
绘制直线当然是最简单的绘图能有什么坑呢不信的同学可以直接跳到注意事项。就算你是 OpenCV 大神如果这 10 个问题点你都掌握那我是真的服了。
7.1 绘图函数基本参数
OpenCV提供了绘图功能可以在图像上绘制直线、矩形、圆、椭圆等各种几何图形。
函数 cv.line()、cv.rectangle()、cv.circle()、cv.polylines() 等分别用来在图像中绘制直线、矩形、圆形、多边形等几何形状这些绘图函数中有一些的设置参数介绍如下
img输入输出图像格式不限color绘图线条的颜色(b,g,r) 格式的元组或者表示灰度值的标量 thickness绘制线条的粗细默认值 1px-1 表示内部填充 lineType绘制线段的线性默认为 LINE_8 cv.FILLED内部填充实心图形cv.LINE_44 邻接线型cv.LINE_88 邻接线型cv.LINE_AA抗锯齿线型图像更平滑 shift点坐标的小数位数默认为 0 7.2 绘制直线
函数原型
函数 cv.line() 用来在图像中绘制直线函数 cv.arrowedLine() 用来在图像中绘制带箭头直线。
cv.line(img, pt1, pt2, color[, thickness1, lineTypeLINE_8, shift0]) → img
cv.arrowedLine(img, pt1, pt2, color[, thickness1, line_type8, shift0, tipLength0.1]) → img函数 cv.line() 绘制图像中点 pt1 与点 pt2 之间的线段函数 cv.arrowedLine() 绘制图像中点 pt1 与点 pt2 之间的带箭头线段。
参数说明
img输入输出图像允许单通道灰度图像或多通道彩色图像pt1线段第一个点的坐标(x1, y1)pt2线段第二个点的坐标(x2, y2)tipLength箭头部分长度与线段长度的比例默认为 0.1
注意事项
绘图操作会直接对传入的图像 img 进行修改是否接受函数返回值都可以。如果要保持输入图像不变则要用 img.copy() 进行复制。使用线段的起点 pt1、终点 pt2 绘制直线注意起点终点坐标的格式是 (x,y) 而不是 (y,x)。箭头从起点 pt1 指向终点 pt2通过交换起点 pt1 和终点 pt2 重复绘制可以生成双向箭头的线段。如果终点坐标超出了图像边界则绘制的线段由图像边界剪裁。即直线的形状由 pt1、pt2 决定但线段终点是直线 pt1-pt2 与图像边界的交点。如果终点坐标超出图像边界箭头可能显示不全或显示不出来。在彩色图像上绘图线条颜色 color 可以元组 (b,g,r) 表示如 (0,0,255) 表示红色也可以是标量 b但并不是表示灰度线条而是表示颜色 (b,0,0)。在单通道的灰度图像上只能绘制灰度线条不能绘制彩色线条。但是线条颜色 color 可以是标量 b也可以是元组 (b,g,r)都会被解释为灰度值 b。元组中的后两个通道的参数是无效的。如果设置了 thickness关键词 “lineType” 可以省略如果没有设置 thickness则关键词 “lineType” 不能省略否则输入的线型参数会被错误地解释为线宽。在绘制直线时不能选择填充线型 “cv.FILLED”否则会报错。在图像尺寸较小时LINE_4 线型存在明显的锯齿LINE_AA 线型更加平滑。但是如果图像尺寸较大则线型的影响并不大推荐采用默认值 LINE_8。箭头与直线的夹角是 ±45o\pm 45^o±45otipLength 表示箭头部分长度与线段长度的比例。
以上这些注意事项请对照例程和结果图再回顾一下。 例程 A4.1在图像上绘制直线 # A4.1 在图像上绘制直线height, width, channels 200, 120, 3img np.ones((height, width, channels), np.uint8)*160 # 创建黑色图像 RGB0# 注意 pt1, pt2 坐标的格式是 (x,y) 而不是 (y,x)img1 img.copy()cv.line(img1, (0,0), (200,150), (0,0,255), 1) # 红色 R255cv.line(img1, (0,0), (150,200), (0,255,0), 1) # 绿色 G255cv.line(img1, (0,50), (200,50), (128,0,0), 2) # 深蓝色 B 128cv.line(img1, (0,100), (200,100), 128, 2) # color128 等效于 (128,0,0)cv.line(img1, (0,150), (200,150), 255, 2) # color255 等效于 (255,0,0)img2 img.copy()# img2 cv.line(img2, (0,120), (100,180), (0,0,255), lineTypecv.FILLED) # cv.FILLED 非法img2 cv.line(img2, (0,80), (150,160), (0,0,255), lineTypecv.LINE_4) # 红色cv.LINE_4img2 cv.line(img2, (0,40), (150,120), (0,0,255), lineTypecv.LINE_8) # 红色cv.LINE_8img2 cv.line(img2, (0,0), (150,80), (0,0,255), lineTypecv.LINE_AA) # 红色cv.LINE_AA# 如果设置了 thickness关键词 lineType 可以省略img2 cv.line(img2, (150,10), (20,50), (0,255,0), 1, cv.LINE_8) # 绿色img2 cv.line(img2, (150,60), (20,100), (0,255,0), 1, cv.LINE_AA) # 绿色# 如果没有设置 thickness则关键词 lineType 不能省略img2 cv.line(img2, (150,110), (30,150), (255,0,0), cv.LINE_8) # 蓝色, cv.LINE 被识别为线宽img2 cv.line(img2, (150,160), (30,200), (255,0,0), cv.LINE_AA) # 蓝色, cv.LINE 被识别为线宽# img3 img.copy()# tipLength 指箭头部分长度与整个线段长度的比例img3 cv.arrowedLine(img.copy(), (10,0), (100,30), (0,0,255), tipLength0.05) # 从 pt1 指向 pt2img3 cv.arrowedLine(img3, (10,50), (100,80), (0,0,255), tipLength0.1)img3 cv.arrowedLine(img3, (10,100), (100,130), (0,0,255), tipLength0.2) # 双向箭头img3 cv.arrowedLine(img3, (100,130), (10,100), (0,0,255), tipLength0.2) # 双向箭头img3 cv.arrowedLine(img3, (10,150), (200,200), (0,0,255), tipLength0.1) # 终点越界箭头不显示# 没有使用 img.copy(), 将直接改变 img并相互影响img4 cv.line(img, (0,100), (150,100), (0,255,0), 1) # 水平线, y100img5 cv.line(img, (75,0), (75,200), (0,0,255), 1) # 垂直线, x 60# 绘制直线可以用于灰度图像参数 color 只有第一通道值有效并被设为灰度值gray np.zeros((height, width), np.uint8) # 创建灰度图像img6 cv.line(gray, (0,10), (200,10), (0,255,255), 2)img6 cv.line(gray, (0,30), (200,30), (64,128,255), 2)img6 cv.line(gray, (0,60), (200,60), (128,64,255), 2)img6 cv.line(gray, (0,100), (200,100), (255,0,255), 2)img6 cv.line(gray, (20,0), (20,200), 128, 2)img6 cv.line(gray, (60,0), (60,200), (255,0,0), 2)img6 cv.line(gray, (100,0), (100,200), (255,255,255), 2)print(gray.shape, img6.shape)plt.figure(figsize(9, 6))plt.subplot(231), plt.title(img1), plt.axis(off)plt.imshow(cv.cvtColor(img1, cv.COLOR_BGR2RGB))plt.subplot(232), plt.title(img2), plt.axis(off)plt.imshow(cv.cvtColor(img2, cv.COLOR_BGR2RGB))plt.subplot(233),plt.title(img3), plt.axis(off)plt.imshow(cv.cvtColor(img3, cv.COLOR_BGR2RGB))plt.subplot(234), plt.title(img4), plt.axis(off)plt.imshow(cv.cvtColor(img4, cv.COLOR_BGR2RGB))plt.subplot(235), plt.title(img5), plt.axis(off)plt.imshow(cv.cvtColor(img5, cv.COLOR_BGR2RGB))plt.subplot(236),plt.title(img6), plt.axis(off)plt.imshow(img6, cmapgray)plt.tight_layout()plt.show()例程说明
本例程运行结果如下图所示。前文中的注意事项可以对照例程中的注释和运行结果图来阅读。 【本节完】 版权声明 参考文献 Use the Photoshop Levels adjustment (adobe.com) youcansxupt 原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/125432101) Copyright 2022 youcans, XUPT Crated2022-6-20 欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列持续更新中 210. 绘制直线也会有这么多坑