1. 程式人生 > >opencv for python (18) 邊界矩形、最小外接圓、橢圓擬合、直線擬合

opencv for python (18) 邊界矩形、最小外接圓、橢圓擬合、直線擬合

函式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)