使用python opencv返回點(diǎn)集cnt的最小外接矩形,所用函數(shù)為 cv2.minAreaRect(cnt) ,cnt是點(diǎn)集數(shù)組或向量(里面存放的是點(diǎn)的坐標(biāo)),并且這個(gè)點(diǎn)集不定個(gè)數(shù)。
舉例說(shuō)明:畫一個(gè)任意四邊形(任意多邊形都可以)的最小外接矩形,那么點(diǎn)集?cnt 存放的就是該四邊形的4個(gè)頂點(diǎn)坐標(biāo)(點(diǎn)集里面有4個(gè)點(diǎn))
cnt = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]]) # 必須是array數(shù)組的形式 rect = cv2.minAreaRect(cnt) # 得到最小外接矩形的(中心(x,y), (寬,高), 旋轉(zhuǎn)角度) box = cv2.cv.BoxPoints(rect) # cv2.boxPoints(rect) for OpenCV 3.x 獲取最小外接矩形的4個(gè)頂點(diǎn)坐標(biāo) box = np.int0(box)
函數(shù) cv2.minAreaRect() 返回一個(gè)Box2D結(jié)構(gòu)rect:(最小外接矩形的中心(x,y),(寬度,高度),旋轉(zhuǎn)角度),但是要繪制這個(gè)矩形,我們需要矩形的4個(gè)頂點(diǎn)坐標(biāo)box, 通過(guò)函數(shù) cv2.cv.BoxPoints() 獲得,返回形式[ [x0,y0], [x1,y1], [x2,y2], [x3,y3] ]。得到的最小外接矩形的4個(gè)頂點(diǎn)順序、中心坐標(biāo)、寬度、高度、旋轉(zhuǎn)角度(是度數(shù)形式,不是弧度數(shù))的對(duì)應(yīng)關(guān)系如下:
注意:
- 旋轉(zhuǎn)角度θ是水平軸(x軸)逆時(shí)針旋轉(zhuǎn),與碰到的矩形的第一條邊的夾角。并且這個(gè)邊的邊長(zhǎng)是width,另一條邊邊長(zhǎng)是height。也就是說(shuō),在這里,width與height不是按照長(zhǎng)短來(lái)定義的。
-
在opencv中,坐標(biāo)系原點(diǎn)在左上角,相對(duì)于x軸,逆時(shí)針旋轉(zhuǎn)角度為負(fù),順時(shí)針旋轉(zhuǎn)角度為正。所以,θ∈(-90度,0]。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
