import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread("../SampleImages/stars.png")
plt.imshow(img[:,:,::-1])
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#通过cv.threshold转换为二值图
ret,thresh = cv.threshold(img_gray, 127, 255, 0)
plt.imshow(thresh, cmap=plt.cm.gray)
#轮廓检测
contours,hierarchy = cv.findContours(thresh, 1, 2)
#绘制轮廓
img_contours_org = img.copy()
img_contours_org = cv.drawContours(img_contours_org, contours, -1, (0,255,0), 2)
plt.imshow(img_contours_org[:,:,::-1])
img_rect_contour = img.copy()
for contour in contours:
#1. 绘制直边界矩形
#x,y,w,h = cv.boundingRect(contour)
#contour: 轮廓信息
#x,y,w,h: 矩形左上角(x,y)坐标,以及矩形的宽度和高度
#参考资料:https://blog.csdn.net/hjxu2016/article/details/77833984
x,y,w,h = cv.boundingRect(contour)
img_rect_contour = cv.rectangle(img_rect_contour, (x,y), (x+w,y+h), (0,255,0), 2)
#2. 绘制旋边界矩形结果
#rect = cv.minAreaRect(contour)
#contour:轮廓信息
#rect: 最小外接矩阵的信息(中心(x,y),(w,h),旋转角度)
#参考资料:https://blog.csdn.net/lanyuelvyun/article/details/76614872
rect = cv.minAreaRect(contour)
#使用boxPoints获得最小外接矩阵的4个顶点坐标
box = cv.boxPoints(rect)
#转换为int类型
box = np.intp(box)
#使用cv.polylines绘制外接矩形
cv.polylines(img_rect_contour, [box], True, (0,0,255), 2)
plt.imshow(img_rect_contour[:,:,::-1])
Python Opencv实践 - 矩形轮廓绘制(直边矩形,最小外接矩形)
亦枫Leonlew2023-09-06 23:51
相关推荐
Cachel wood2 分钟前
python round四舍五入和decimal库精确四舍五入Code哈哈笑5 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活終不似少年遊*8 分钟前
pyecharts程序猿进阶8 分钟前
深入解析 Spring WebFlux:原理与应用Python之栈9 分钟前
【无标题】qq_4336184411 分钟前
shell 编程(二)charlie11451419125 分钟前
C++ STL CookBook袁袁袁袁满25 分钟前
100天精通Python(爬虫篇)——第113天:爬虫基础模块之urllib详细教程大全ELI_He99932 分钟前
PHP中替换某个包或某个类m0_7482361139 分钟前
Calcite Web 项目常见问题解决方案