引子
我根据一个矩形进行了各种角度旋转,就想通过绘制一个带方向的线段表示它,通过旋转矩阵很容易的获取了两个点坐标,但是很快遇到了一个新问题,怎么绘制那个箭头,就是带箭头的线段,OpenCV中的cv.line函数只支持绘制不带箭头的线段,于是我决定重复造轮子。
手动版实现带箭头的线段绘制
因为我知道opencv有个函数是line无法支持绘制带箭头的直线,于是网上一通猛搜,发现一个哥们博客写OpenCV3如何绘制带箭头的线段,C++的代码!然后我就直接一键copy了,一通猛改之后,Python版本就出现了,代码如下:
importmath
importcv2ascv
importnumpyasnp
image=cv.imread("D:/images/1024_mask.png")
length=10
angle=45
l1=length*np.cos(angle*np.pi/180)
l2=length*np.sin(angle*np.pi/180)
p1=(100,150)
p2=(400,400)
p3=(0.,0.)
pt4=(0.,0.)
#i,j代表p2、p3、p4相对于p0的正负
ifp2[0]>p1[0]:
i=1
else:
i=-1
ifp2[1]>p1[1]:
j=1
else:
j=-1
#直线p1p2相对于x轴的角度,取正值
a1=abs(math.atan((p2[1]-p1[1])/(p2[0]-p1[0])))
#用于计算p2相对于p0的宽高
w1=l1*math.cos(a1)
h1=l1*math.sin(a1)
p0=(p2[0]-w1*i,p2[1]-h1*j);
#直线p3p4相对于x轴的角度
a2=90*np.pi/180-a1;
w2=l2*np.cos(a2)
#用于计算p3和p4相对于p0的宽高
h2=l2*np.sin(a2)
p3=(int(p0[0]-w2*i),int(p0[1]+h2*j))
p4=(int(p0[0]+w2*i),int(p0[1]-h2*j))
cv.line(image,p1,p2,(0,255,0),2,8,0)
#画箭头
cv.line(image,p2,p3,(0,255,0),2,8,0)
cv.line(image,p2,p4,(0,255,0),2,8,0)
cv.imshow("arrow-linedemo",image)
cv.waitKey(0)
cv.destroyAllWindows()
改完运行一下,发现可以啦:
其实没那么复杂
后来我又搜索了一波,发现其实OpenCV还有另外一个函数可以直接绘制带箭头的线段的,就是说我在重复造轮子!OpenCV中的函数是:
voidcv::arrowedLine(
InputOutputArrayimg,#输入图像
Pointpt1,#线段端点
Pointpt2,
constScalar&color,#颜色
intthickness=1,#线宽
intline_type=8,#渲染类型
intshift=0,
doubletipLength=0.1
)
注意 :最后一个参数,它决定箭头的大小,默认是线段长度的十分之一!然后用它,一行代码就可以啦!
importcv2ascv
image=cv.imread("D:/images/1024_mask.png")
cv.arrowedLine(image,(100,150),(400,400),(0,255,0),2,8,0,0.05)
cv.imshow("arrow-linedemo",image)
cv.waitKey(0)
cv.destroyAllWindows()
我又相信OpenCV了!
原文标题:冷知识 | OpenCV绘制带箭头方向的线段
文章出处:【微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
函数
+关注
关注
3文章
4303浏览量
62411 -
OpenCV
+关注
关注
29文章
626浏览量
41247 -
python
+关注
关注
55文章
4778浏览量
84439
原文标题:冷知识 | OpenCV绘制带箭头方向的线段
文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
《DNK210使用指南 -CanMV版 V1.0》第三十三章 image元素绘制实验
= image.Image(size=(320, 240))img.clear()image模块为Image对象提供了draw_line()方法,用于在图像上绘制一条线段,draw_line()方法
发表于 11-04 14:22
怎样绘制流程图
此操作。在输入内容的同时,右面的工具栏可以对文本样式,背景颜色,以及排列方式进行设置,使用很方便。 5.绘制完成的流程图需要对添加的图形以及线段文本内容进行检查,在面板中的编辑选项中选择节点可以完后
发表于 01-15 11:38
CAD手机看图软件中的多线段功能如何使用?
在CAD手机看图软件浩辰CAD看图王手机版中的多线段功能可以绘制连续的直线,还可以绘制多线段圆弧,同时还提供了对多线段的编辑功能。利用这些基
发表于 11-19 14:19
CAD中怎么旋转箭头符号?
。关于使用正版CAD软件——浩辰CAD电气软件旋转dwg格式图纸文件中箭头符号的相关操作技巧就给大家介绍到这里了,各位小伙伴在绘制dwg格式图纸文件的过程中如果需要旋转箭头符号可以参考本篇CAD教程来操作,更多相关CAD教程请持
发表于 04-02 17:12
CAD中如何绘制带有箭头的引出标注?
技巧。CAD中箭头引注的使用技巧:浩辰CAD给排水软件中箭头引注命令主要用于绘制带有箭头的引出标注,文字可从线端标注也可从线上标注,引线可以多次转折,用于楼梯方向线、坡度等标注,提供共
发表于 05-14 17:04
CAD怎么连接线段?CAD线段连接教程
在CAD绘图过程中,如果想要连接两条线段的话该如何操作呢?其实很简答,接下来的CAD教程就和小编一起来了解一下浩辰CAD建筑软件中CAD线段连接的相关操作技巧吧!CAD连接线段的操作步骤:浩辰CAD
发表于 06-06 20:33
以动画形式绘制交流电压u(t)=Umcos(wt)的波形和对应的时间相量与瞬时值关系图 精选资料分享
,ArrowSize,C,W,theta)%从Start到End绘制一条带箭头的直线if nargin==7 theta=0;elseif nargin==6 theta=0; W=1;elseif nargin==5 thet
发表于 07-09 07:39
【Altium小课专题 第110篇】什么是辅助线,在原理图中怎么放置辅助线?
”进行放置。2)在一个合适的位置单击鼠标“左键”,找到下一个位置单击鼠标“左键”确认结束点,,绘制过程中按空格键改变绘制形状。3)在放置的状态下按Table键,在属性框中将结束线段的形状改为“
发表于 07-15 09:50
基于面绘制与体绘制的CT可视化实现方法
医学图像三维可视化方法分为面绘制和体绘制。讨论了两种绘制方法的思想和优缺点,介绍了两种算法的机理和实现过程。采用Visualization Toolkit进行医学数据可视化,分析
发表于 02-21 14:48
•37次下载
基于几何约束的视频帧间线段特征匹配算法
针对线段因遮挡、断裂以及端点提取不准确等原因造成的线段特征匹配困难问题,特别是现有匹配算法在匹配过程中出现多配多时直接采取最相似匹配而导致丢失大量真实匹配的问题,提出了一种基于多重几何约束及0-1
发表于 11-29 10:20
•0次下载
基于线段树的内存管理方法
现有的内存管理的工作多集中在内存分配的效率上,实时性较好,但易产生内存碎片。为此,提出基于线段树的高效内存管理方法。该方法将内存地址空间划分为内存段,建立内存管理线段树,基于所建立的内存管理线段树
发表于 12-27 14:06
•2次下载
怎样用CDR制作箭头流程图
箭头流程图主要由矢量图和连接符组成,通过图形之间的顺序阐述的一个过程,应用也是非常广泛,有些软件中会自带流程图,对于CDR这款矢量绘图软件来说,手动制作流程图是简单且高效的。首先CorelDRAW
mos管的箭头表示什么?mos管电流方向与箭头
mos管的箭头表示什么?mos管电流方向与箭头 MOS管(Metal Oxide Semiconductor Field Effect Transistor)是一种常用的半导体器件,它是在MOS结构
评论