引子
我根據一個矩形進行了各種角度旋轉,就想通過繪制一個帶方向的線段表示它,通過旋轉矩陣很容易的獲取了兩個點坐標,但是很快遇到了一個新問題,怎么繪制那個箭頭,就是帶箭頭的線段,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文章
4346瀏覽量
62971 -
OpenCV
+關注
關注
31文章
635瀏覽量
41556 -
python
+關注
關注
56文章
4807瀏覽量
85037
原文標題:冷知識 | 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結構
評論