ndfweb.cn

python opencv minAreaRect 生成最小外接矩形


2021-08-18 00:04:46 (3430)



方法


使用python opencv返回點集cnt的最小外接矩形,所用函數為 cv2.minAreaRect(cnt) ,cnt是點集數組或向量(裏麵存放的是點的坐標),並且這個點集中的元素不定個數。


舉例說明


畫一個任意四邊形(任意多邊形都可以)的最小外接矩形,那麼點集 cnt 存放的就是該四邊形的4個頂點坐標(點集裏麵有4個點)


cnt = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]]) # 必須是array數組的形式

rect = cv2.minAreaRect(cnt) # 得到最小外接矩形的(中心(x,y), (寬,高), 旋轉角度)

box = cv2.cv.BoxPoints(rect) # 獲取最小外接矩形的4個頂點坐標(ps: cv2.boxPoints(rect) for OpenCV 3.x)

box = np.int0(box)

# 畫出來

cv2.drawContours(img, [box], 0, (255, 0, 0), 1)

cv2.imwrite('contours.png', img)

函數 cv2.minAreaRect() 返回一個Box2D結構rect:(最小外接矩形的中心(x,y),(寬度,高度),旋轉角度),但是要繪製這個矩形,我們需要矩形的4個頂點坐標box, 通過函數 cv2.cv.BoxPoints() 獲得,返回形式[ [x0,y0], [x1,y1], [x2,y2], [x3,y3] ]。得到的最小外接矩形的4個頂點順序、中心坐標、寬度、高度、旋轉角度(是度數形式,不是弧度數)的對應關係如下:




注意:


旋轉角度θ是水平軸(x軸)逆時針旋轉,直到碰到矩形的第一條邊停住,此時該邊與水平軸的夾角。並且這個邊的邊長是width,另一條邊邊長是height。也就是說,在這裏,width與height不是按照長短來定義的。

在opencv中,坐標係原點在左上角,相對於x軸,逆時針旋轉角度為負,順時針旋轉角度為正。所以,θ∈(-90度,0]。


本文版权:http://www.ndfweb.cn/news-896.html
  NDF俱乐部
  国际域名注册
  建站咨询
简体中文 NDF网站建设淘宝店 | ICO图标在线生成 | 外贸网站建设 | 联系我们
©2007-2024 NDF Corporation 鲁ICP备08005967号 Sitemap - RSSRSS订阅