想要把前視圖轉(zhuǎn)化為鳥瞰圖,有兩種做法
1.在沒有標(biāo)定的情況下物咳,只能選取四個(gè)點(diǎn)對(duì)了
- 在有標(biāo)定的情況下,可以直接使用標(biāo)定的參數(shù)
這里主要介紹1
1.沒有標(biāo)定的情況下赋咽,主要用到了兩個(gè)函數(shù)
M = cv2.getPerspectiveTransform(src, dst)
warped = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0] + 1080))
cv2.getPerspectiveTransform 從四個(gè)點(diǎn)對(duì)中計(jì)算透視變換,返回值為3*3的透視變換矩陣
cv2.warpPerspective 計(jì)算透視變換后的圖像
這里自己遇到的坑是吨娜,在計(jì)算透視變換矩陣的時(shí)候脓匿,怎么獲取那四個(gè)點(diǎn)對(duì),翻了很多blog宦赠,都沒搞清陪毡,最后認(rèn)認(rèn)真真的找了一個(gè)認(rèn)認(rèn)真真的閱讀之后,總算摸到門道了勾扭,有了一種融會(huì)貫通的感覺毡琉。
現(xiàn)在的目標(biāo)是將圖像由前視圖轉(zhuǎn)化為鳥瞰圖,根據(jù)先驗(yàn)知識(shí)妙色,在鳥瞰圖下桅滋,長方形物體顯示出來肯定是長方形,因此身辨,我們只要在前視圖中找到一個(gè)正方形的物體丐谋,并指定他在俯視圖中的坐標(biāo)就可以了芍碧,這里有個(gè)但是,由于先驗(yàn)信息里面只有矩形這個(gè)信息号俐,具體的長寬比什么的师枣,以及實(shí)際的大小未知,所以轉(zhuǎn)化到鳥瞰圖下并不能反應(yīng)物體的真實(shí)長度萧落。
這里怎么定義轉(zhuǎn)化后的坐標(biāo)要自己把握
比如說轉(zhuǎn)化到黃色的坐標(biāo)(內(nèi)接矩形),這時(shí)候就會(huì)內(nèi)縮洗贰,圖像出現(xiàn)黑邊
如果轉(zhuǎn)化到藍(lán)色的找岖,那么能看到的方位就很小了,只有當(dāng)前車道了(外接矩形)
dst的坐標(biāo)也可以自己寫敛滋,想要轉(zhuǎn)成多大的圖像也可以自己填
比如說根據(jù)車道的寬度和虛線的長度许布,可以大概估算出實(shí)際長寬比,一個(gè)車道寬度為3.75米 這種城市道路一般虛線是兩米绎晃,間隔4米(高速一般是69蜜唾,也就是15米)大概估計(jì)一下,高度是12米庶艾,也就是說長寬比為12:7袁余,想要顯示出4個(gè)車道,圖像的寬度為1920咱揍,折算了一下颖榜,目標(biāo)圖像的坐標(biāo)大概是(這里要注意,圖像的坐標(biāo)是從左上角開始算的)
坐標(biāo)定義代碼:
src = np.float32([(1242,1949),(1961,1949), (2695, 2542), (133, 2542)])
#內(nèi)接矩形
dst = np.float32([(1242, 1949), (1961, 1949), (1961, 2542), (1242, 2542)])
#外接矩形
dst = np.float32([(132, 1949), (2695, 1949), (2695, 2542), (133, 2542)])
#自定義
dst = np.float32([(480,1560-1080), (1440,1560-1080), (1440,3096-1080), (480,3096-1080)])
2.使用標(biāo)定參數(shù)來轉(zhuǎn)化
這個(gè)轉(zhuǎn)化就是真實(shí)的了煤裙,因?yàn)橹老鄼C(jī)的內(nèi)參掩完,還有相機(jī)的pitch角以及相機(jī)距離地面的高度
matlab里面轉(zhuǎn)的,要標(biāo)定的參數(shù)
https://ww2.mathworks.cn/help/driving/ref/birdseyeview.transformimage.html
可以參考的透視變換