引子
我根據(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)注明出處。
-
函數(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)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論