0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

手动版实现带箭头的线段绘制

OpenCV学堂 来源:OpenCV学堂 作者:gloomyfish 2022-05-17 11:24 次阅读

引子

我根据一个矩形进行了各种角度旋转,就想通过绘制一个带方向的线段表示它,通过旋转矩阵很容易的获取了两个点坐标,但是很快遇到了一个新问题,怎么绘制那个箭头,就是带箭头的线段,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

    文章

    3866

    浏览量

    61308
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40767
  • python
    +关注

    关注

    51

    文章

    4674

    浏览量

    83464

原文标题:冷知识 | OpenCV绘制带箭头方向的线段

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    keil 与proteus 调联 没箭头是怎么回事?

    本帖最后由 eehome 于 2013-1-5 10:09 编辑 调联时,老是跳到STARTUP,A51窗口。就算手动切换到写语句的那个窗口,进行单步调试时,它又自动跳到STARTUP,A51窗口了而且在图二那个页面没有箭头(就是指着下一步要进行的语句的
    发表于 12-11 12:11

    AD10中手动绘制PCB封装

    AD10中手动绘制PCB封装,放置焊盘时,为要选择Top Layer层上?
    发表于 08-07 17:56

    怎样绘制流程图

    此操作。在输入内容的同时,右面的工具栏可以对文本样式,背景颜色,以及排列方式进行设置,使用很方便。 5.绘制完成的流程图需要对添加的图形以及线段文本内容进行检查,在面板中的编辑选项中选择节点可以完后
    发表于 01-15 11:38

    canvas橡皮筋式线段绘制方法

    canvas橡皮筋式线段绘制
    发表于 09-04 08:54

    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次下载

    力的三要素是什么?什么是力?

    力的三要素是什么?力的大小、方向和作用点合称为“力的三要素”。常用有向线段来表示力。线段的长度跟力的大小成正比,箭头表示力的方向,线段的起点表
    发表于 03-18 11:13 2w次阅读

    基于线段树的内存管理方法

    现有的内存管理的工作多集中在内存分配的效率上,实时性较好,但易产生内存碎片。为此,提出基于线段树的高效内存管理方法。该方法将内存地址空间划分为内存段,建立内存管理线段树,基于所建立的内存管理线段
    发表于 12-27 14:06 2次下载
    基于<b class='flag-5'>线段</b>树的内存管理方法

    怎样用CDR制作箭头流程图

    箭头流程图主要由矢量图和连接符组成,通过图形之间的顺序阐述的一个过程,应用也是非常广泛,有些软件中会自带流程图,对于CDR这款矢量绘图软件来说,手动制作流程图是简单且高效的。首先CorelDRAW
    的头像 发表于 10-11 15:50 7065次阅读

    mos管的箭头表示什么?mos管电流方向与箭头

    mos管的箭头表示什么?mos管电流方向与箭头 MOS管(Metal Oxide Semiconductor Field Effect Transistor)是一种常用的半导体器件,它是在MOS结构
    的头像 发表于 09-07 16:08 3952次阅读