0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

手動(dòng)版實(shí)現(xiàn)帶箭頭的線段繪制

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 作者:gloomyfish ? 2022-05-17 11:24 ? 次閱讀

引子

我根據(jù)一個(gè)矩形進(jìn)行了各種角度旋轉(zhuǎn),就想通過繪制一個(gè)帶方向的線段表示它,通過旋轉(zhuǎn)矩陣很容易的獲取了兩個(gè)點(diǎn)坐標(biāo),但是很快遇到了一個(gè)新問題,怎么繪制那個(gè)箭頭,就是帶箭頭的線段,OpenCV中的cv.line函數(shù)只支持繪制不帶箭頭的線段,于是我決定重復(fù)造輪子。

手動(dòng)版實(shí)現(xiàn)帶箭頭的線段繪制

因?yàn)槲抑纎pencv有個(gè)函數(shù)是line無法支持繪制帶箭頭的直線,于是網(wǎng)上一通猛搜,發(fā)現(xiàn)一個(gè)哥們博客寫OpenCV3如何繪制帶箭頭的線段,C++的代碼!然后我就直接一鍵copy了,一通猛改之后,Python版本就出現(xiàn)了,代碼如下:
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相對(duì)于p0的正負(fù)
ifp2[0]>p1[0]:
i=1
else:
i=-1

ifp2[1]>p1[1]:
j=1
else:
j=-1

#直線p1p2相對(duì)于x軸的角度,取正值
a1=abs(math.atan((p2[1]-p1[1])/(p2[0]-p1[0])))

#用于計(jì)算p2相對(duì)于p0的寬高
w1=l1*math.cos(a1)
h1=l1*math.sin(a1)
p0=(p2[0]-w1*i,p2[1]-h1*j);

#直線p3p4相對(duì)于x軸的角度
a2=90*np.pi/180-a1;
w2=l2*np.cos(a2)

#用于計(jì)算p3和p4相對(duì)于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()
改完運(yùn)行一下,發(fā)現(xiàn)可以啦:

其實(shí)沒那么復(fù)雜

后來我又搜索了一波,發(fā)現(xiàn)其實(shí)OpenCV還有另外一個(gè)函數(shù)可以直接繪制帶箭頭的線段的,就是說我在重復(fù)造輪子!OpenCV中的函數(shù)是:
voidcv::arrowedLine(
InputOutputArrayimg,#輸入圖像
Pointpt1,#線段端點(diǎn)
Pointpt2,
constScalar&color,#顏色
intthickness=1,#線寬
intline_type=8,#渲染類型
intshift=0,
doubletipLength=0.1
)
注意 :最后一個(gè)參數(shù),它決定箭頭的大小,默認(rèn)是線段長(zhǎng)度的十分之一!然后用它,一行代碼就可以啦!
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了!

原文標(biāo)題:冷知識(shí) | OpenCV繪制帶箭頭方向的線段

文章出處:【微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4284

    瀏覽量

    62325
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    625

    瀏覽量

    41214
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4767

    瀏覽量

    84376

原文標(biāo)題:冷知識(shí) | OpenCV繪制帶箭頭方向的線段

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    《DNK210使用指南 -CanMV版 V1.0》第三十三章 image元素繪制實(shí)驗(yàn)

    = image.Image(size=(320, 240))img.clear()image模塊為Image對(duì)象提供了draw_line()方法,用于在圖像上繪制一條線段,draw_line()方法
    發(fā)表于 11-04 14:22

    AD10中手動(dòng)繪制PCB封裝

    AD10中手動(dòng)繪制PCB封裝,放置焊盤時(shí),為要選擇Top Layer層上?
    發(fā)表于 08-07 17:56

    怎樣繪制流程圖

    此操作。在輸入內(nèi)容的同時(shí),右面的工具欄可以對(duì)文本樣式,背景顏色,以及排列方式進(jìn)行設(shè)置,使用很方便。 5.繪制完成的流程圖需要對(duì)添加的圖形以及線段文本內(nèi)容進(jìn)行檢查,在面板中的編輯選項(xiàng)中選擇節(jié)點(diǎn)可以完后
    發(fā)表于 01-15 11:38

    canvas橡皮筋式線段繪制方法

    canvas橡皮筋式線段繪制
    發(fā)表于 09-04 08:54

    CAD手機(jī)看圖軟件中的多線段功能如何使用?

    在CAD手機(jī)看圖軟件浩辰CAD看圖王手機(jī)版中的多線段功能可以繪制連續(xù)的直線,還可以繪制線段圓弧,同時(shí)還提供了對(duì)多線段的編輯功能。利用這些基
    發(fā)表于 11-19 14:19

    CAD中怎么旋轉(zhuǎn)箭頭符號(hào)?

    。關(guān)于使用正版CAD軟件——浩辰CAD電氣軟件旋轉(zhuǎn)dwg格式圖紙文件中箭頭符號(hào)的相關(guān)操作技巧就給大家介紹到這里了,各位小伙伴在繪制dwg格式圖紙文件的過程中如果需要旋轉(zhuǎn)箭頭符號(hào)可以參考本篇CAD教程來操作,更多相關(guān)CAD教程請(qǐng)持
    發(fā)表于 04-02 17:12

    CAD中如何繪制帶有箭頭的引出標(biāo)注?

    技巧。CAD中箭頭引注的使用技巧:浩辰CAD給排水軟件中箭頭引注命令主要用于繪制帶有箭頭的引出標(biāo)注,文字可從線端標(biāo)注也可從線上標(biāo)注,引線可以多次轉(zhuǎn)折,用于樓梯方向線、坡度等標(biāo)注,提供共
    發(fā)表于 05-14 17:04

    CAD怎么連接線段?CAD線段連接教程

    在CAD繪圖過程中,如果想要連接兩條線段的話該如何操作呢?其實(shí)很簡(jiǎn)答,接下來的CAD教程就和小編一起來了解一下浩辰CAD建筑軟件中CAD線段連接的相關(guān)操作技巧吧!CAD連接線段的操作步驟:浩辰CAD
    發(fā)表于 06-06 20:33

    以動(dòng)畫形式繪制交流電壓u(t)=Umcos(wt)的波形和對(duì)應(yīng)的時(shí)間相量與瞬時(shí)值關(guān)系圖 精選資料分享

    ,ArrowSize,C,W,theta)%從Start到End繪制一條箭頭的直線if nargin==7 theta=0;elseif nargin==6 theta=0; W=1;elseif nargin==5 thet
    發(fā)表于 07-09 07:39

    【Altium小課專題 第110篇】什么是輔助線,在原理圖中怎么放置輔助線?

    ”進(jìn)行放置。2)在一個(gè)合適的位置單擊鼠標(biāo)“左鍵”,找到下一個(gè)位置單擊鼠標(biāo)“左鍵”確認(rèn)結(jié)束點(diǎn),,繪制過程中按空格鍵改變繪制形狀。3)在放置的狀態(tài)下按Table鍵,在屬性框中將結(jié)束線段的形狀改為“
    發(fā)表于 07-15 09:50

    基于面繪制與體繪制的CT可視化實(shí)現(xiàn)方法

    醫(yī)學(xué)圖像三維可視化方法分為面繪制和體繪制。討論了兩種繪制方法的思想和優(yōu)缺點(diǎn),介紹了兩種算法的機(jī)理和實(shí)現(xiàn)過程。采用Visualization Toolkit進(jìn)行醫(yī)學(xué)數(shù)據(jù)可視化,分析
    發(fā)表于 02-21 14:48 ?37次下載

    基于幾何約束的視頻幀間線段特征匹配算法

    針對(duì)線段因遮擋、斷裂以及端點(diǎn)提取不準(zhǔn)確等原因造成的線段特征匹配困難問題,特別是現(xiàn)有匹配算法在匹配過程中出現(xiàn)多配多時(shí)直接采取最相似匹配而導(dǎo)致丟失大量真實(shí)匹配的問題,提出了一種基于多重幾何約束及0-1
    發(fā)表于 11-29 10:20 ?0次下載
    基于幾何約束的視頻幀間<b class='flag-5'>線段</b>特征匹配算法

    基于線段樹的內(nèi)存管理方法

    現(xiàn)有的內(nèi)存管理的工作多集中在內(nèi)存分配的效率上,實(shí)時(shí)性較好,但易產(chǎn)生內(nèi)存碎片。為此,提出基于線段樹的高效內(nèi)存管理方法。該方法將內(nèi)存地址空間劃分為內(nèi)存段,建立內(nèi)存管理線段樹,基于所建立的內(nèi)存管理線段
    發(fā)表于 12-27 14:06 ?2次下載
    基于<b class='flag-5'>線段</b>樹的內(nèi)存管理方法

    怎樣用CDR制作箭頭流程圖

    箭頭流程圖主要由矢量圖和連接符組成,通過圖形之間的順序闡述的一個(gè)過程,應(yīng)用也是非常廣泛,有些軟件中會(huì)自帶流程圖,對(duì)于CDR這款矢量繪圖軟件來說,手動(dòng)制作流程圖是簡(jiǎn)單且高效的。首先CorelDRAW
    的頭像 發(fā)表于 10-11 15:50 ?7557次閱讀

    mos管的箭頭表示什么?mos管電流方向與箭頭

    mos管的箭頭表示什么?mos管電流方向與箭頭 MOS管(Metal Oxide Semiconductor Field Effect Transistor)是一種常用的半導(dǎo)體器件,它是在MOS結(jié)構(gòu)
    的頭像 發(fā)表于 09-07 16:08 ?6325次閱讀