引子
我根據(jù)一個(gè)矩形進(jìn)行了各種角度旋轉(zhuǎn),就想通過(guò)繪制一個(gè)帶方向的線段表示它,通過(guò)旋轉(zhuǎn)矩陣很容易的獲取了兩個(gè)點(diǎn)坐標(biāo),但是很快遇到了一個(gè)新問(wèn)題,怎么繪制那個(gè)箭頭,就是帶箭頭的線段,OpenCV中的cv.line函數(shù)只支持繪制不帶箭頭的線段,于是我決定重復(fù)造輪子。
手動(dòng)版實(shí)現(xiàn)帶箭頭的線段繪制
因?yàn)槲抑纎pencv有個(gè)函數(shù)是line無(wú)法支持繪制帶箭頭的直線,于是網(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)
#畫(huà)箭頭
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í)沒(méi)那么復(fù)雜
后來(lái)我又搜索了一波,發(fā)現(xiàn)其實(shí)OpenCV還有另外一個(gè)函數(shù)可以直接繪制帶箭頭的線段的,就是說(shuō)我在重復(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)注明出處。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4365瀏覽量
63912 -
OpenCV
+關(guān)注
關(guān)注
31文章
642瀏覽量
42274 -
python
+關(guān)注
關(guān)注
56文章
4822瀏覽量
85898
原文標(biāo)題:冷知識(shí) | OpenCV繪制帶箭頭方向的線段
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
《DNK210使用指南 -CanMV版 V1.0》第三十三章 image元素繪制實(shí)驗(yàn)
怎樣繪制流程圖
CAD手機(jī)看圖軟件中的多線段功能如何使用?
CAD中怎么旋轉(zhuǎn)箭頭符號(hào)?
CAD中如何繪制帶有箭頭的引出標(biāo)注?
CAD怎么連接線段?CAD線段連接教程
以動(dòng)畫(huà)形式繪制交流電壓u(t)=Umcos(wt)的波形和對(duì)應(yīng)的時(shí)間相量與瞬時(shí)值關(guān)系圖 精選資料分享
【Altium小課專題 第110篇】什么是輔助線,在原理圖中怎么放置輔助線?
基于面繪制與體繪制的CT可視化實(shí)現(xiàn)方法
基于幾何約束的視頻幀間線段特征匹配算法

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

評(píng)論