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)

没有更多推荐了,返回首页