如何使用OpenCV Python检测图像中的多边形?
我们首先检测图像中的所有对象轮廓以检测多边形。然后遍历所有轮廓。为每个轮廓查找近似的轮廓。如果近似轮廓中的顶点点数为5或更多,则将其绘制为三角形。请参见下面的伪代码。
for cnt in contours:
approx = cv2.approxPolyDP()
if len(approx) >= 5:
cv2.drawContours()
cv2.putText("Polygon")
步骤
我们可以使用以下步骤来检测图像中的多边形:
- 导入所需的库。在所有以下示例中,所需的Python库是 OpenCV 。请确保您已安装它。
-
使用 cv2.imread() 读取输入图像并将其转换为灰度。
-
在灰度图像上应用二值化 cv2.threshold() 以创建二进制图像。调整第二个参数以获得更好的轮廓检测。
-
使用 cv2.findContours() 函数在图像中找到轮廓。
-
从轮廓列表中选择一个轮廓(例如第一个轮廓) cnt 。或者遍历所有检测到的轮廓。
-
使用 cv2.approxPolyDP() 函数为每个轮廓 cnt 计算近似轮廓点( approx )。
-
如果近似轮廓 approx 中的顶点点数总数为5或更多,则在图像上绘制近似轮廓并将其设置为多边形。
-
显示带有绘制轮廓和近似轮廓的图像。
让我们看下面的例子以获得更好的理解。
例子
在这个Python程序中,我们检测输入图像中的多边形。我们还绘制检测到的多边形的轮廓。
# 导入所需库
import cv2
# 读取输入图片
img = cv2.imread('polygons.png')
# 将图片转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 应用阈值来将灰度图像转换为二值图像
ret,thresh = cv2.threshold(gray,50,255,0)
# 查找轮廓
contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
print("检测到的轮廓数量:",len(contours))
for cnt in contours:
approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cnt, True), True)
(x,y)=cnt[0,0]
if len(approx) >= 5:
img = cv2.drawContours(img, [approx], -1, (0,255,255), 3)
cv2.putText(img, '多边形', (x, y),
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 0), 2)
cv2.imshow("多边形", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我们将使用以下图片作为 输入文件 此程序 −
当您运行上述Python程序时,它将产生以下输出窗口−
检测到的轮廓数量: 3
我们得到以下 输出 窗口 −