opencv for python (18) 邊界矩形、最小外接圓、橢圓擬合、直線擬合
阿新 • • 發佈:2019-02-13
函式cv2.boundingRect返回四個引數(x,y)為矩形左上角的座標,(w,h)是矩形的寬和高。
函式cv2.rectangle是繪製矩形函式
函式cv2.minAreaRect返回的是一個 Box2D 結構,其中包含
矩形左上角角點的座標(x,y),矩形的寬和高(w,h),以及旋轉角度。但是要繪製這個矩形需要矩形的 4 個角點,可以通過函式 cv2.boxPoints() 獲得,最後繪製得到旋轉邊界矩形。
函式cv2.minEnclosingCircle可以幫我們找到一個物件的外切圓。它是所有能夠包括物件的圓中面積最小的一個。
函式cv2.fitEllipse返回值其實就是旋轉邊界矩形的內切圓
import cv2
import numpy as np
im = cv2.imread('t1_re.png')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,180,255,cv2.THRESH_BINARY)
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
cnt = contours[0]
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),5)
rect = cv2.minAreaRect(cnt)
box = cv2.cv.BoxPoints(rect)
box = np.int0(box)
cv2.drawContours(im, [box], 0, (0, 0, 255), 2)
(x,y),radius = cv2.minEnclosingCircle(cnt)
center = (int(x),int(y))
radius = int(radius)
cv2.circle(im,center,radius,(255,0,0),2)
ellipse = cv2.fitEllipse(cnt)
cv2.ellipse(im,ellipse,(255,255,0),2)
rows,cols = im.shape[:2]
[vx,vy,x,y] = cv2.fitLine(cnt,CV_DIST_L2,0,0.01,0.01)
lefty = int((-x*vy/vx) + y)
righty = int(((cols-x)*vy/vx)+y)
im = cv2.line(im,(cols-1,righty),(0,lefty),(0,255,0),2)
cv2.imshow('a',im)
cv2.waitKey(0)