代码语言:javascript复制
import cv2
import numpy as np
o=cv2.imread('C:/Users/xpp/Desktop/coins.png')#原始图像
cv2.imshow("original",o)
gray=cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图片
ret,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)#将灰度图片转换为二值图片
contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓
n=len(contours)
contoursImg=[]
for i in range(n):
temp=np.zeros(o.shape,np.uint8)
contoursImg.append(temp)
rect=cv2.minAreaRect(contours[i])#计算最小矩形包围框
print("返回值rect:n",rect)
points=cv2.boxPoints(rect)#矩形的4个顶点坐标
print("n转换后points:n",points)
points=np.int0(points)#计算结果取整
image=cv2.drawContours(o,[points],0,(255,255,255),2)#绘制最小矩形包围框
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()
返回值rect: ((227.5, 62.0), (109.0, 104.0), -0.0) 转换后points: [[173. 114.] [173. 10.] [282. 10.] [282. 114.]]
算法:最小矩形包围框是计算包围指定轮廓点集的中心的坐标、矩形长和宽以及旋转角度。
retval=cv2.minAreaRect(points)
- points表示轮廓
points=cv2.boxPoints(box)
- box表示最小矩形包围框的特征信息,包含矩形的中心的坐标(x,y),矩形宽和长(w,h),旋转角度(θ)
注意:最小矩形包围框可以是个直立的矩形,也可以是倾斜的矩形。