标签:15 07 img cv2 最小 2021 矩形 contours 255
边界框、最小矩形区域和最小闭圆的轮廓,详细注释
python-opencv书籍中这一小节的注释,作为一个新手小白,参考了其他人的注释,这个是我理解的
import cv2
import numpy as np
img = cv2.pyrDown(cv2.imread("test_picture/test_3.png", cv2.IMREAD_UNCHANGED))
# 从一个高分辨率大尺寸的图像向上构建一个金字塔(尺寸变小,分辨率降低) 对图像进行滤波然后进行下采样
ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY)
# 先转换成灰度,然后进行二值化
contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #检测轮廓
for c in contours: # c为图像轮廓findContours返回值
# 计算出简单的边界框(外接的矩形,把找到的形状包起来,先要确定四个点) 将轮廓信息转换成为(x,y)左上点坐标,并加上矩形高度和宽度
x, y, w, h = cv2.boundingRect(c)
cv2.rectangle(img, (x,y), (x+w, y+h), (0, 255, 0), 2) # (B,G,R)绿色绘制边界框, (x+w, y+h)是右下点坐标, 宽度为2
rect = cv2.minAreaRect(c) # 获得最小外接矩形区域,返回Box2D结构rect(中心(x,y), (宽,高), 旋转角度)
box = cv2.boxPoints(rect) # 获取最小外接矩形的4个顶点坐标(ps: cv2.boxPoints(rect) for OpenCV 3.x)
box = np.int0(box) # 将坐标规范化为整数
cv2.drawContours(img, [box], 0, (0, 0, 255), 3) #红色绘制最小矩形区域
(x,y), radius = cv2.minEnclosingCircle(c) #函数获得最小闭圆, 返回圆心和半径
center = (int(x), int(y))
radius = int(radius) # 转换成整数
img = cv2.circle(img, center, radius, (0,255,0),2) #绘制最小闭圆
cv2.drawContours(img, contours, -1, (255, 0, 0), 1) #蓝色绘制边框
cv2.imshow("contours", img)
cv2.waitKey()
cv2.destroyAllWindows()
标签:15,07,img,cv2,最小,2021,矩形,contours,255 来源: https://blog.csdn.net/weixin_42306034/article/details/118764380
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。