📜  OpenCV-绘制凸折线(1)

📅  最后修改于: 2023-12-03 15:33:17.996000             🧑  作者: Mango

OpenCV-绘制凸折线

简介

在计算机视觉中,使用凸包来识别并测量多边形形状和大小非常常见。凸包是一个最小的凸多边形,包含所有给定点。OpenCV提供了一个简单易用的凸包函数cv2.convexHull(),该函数可以帮助我们从一组点中找到凸包。在本文中,我们将介绍如何使用OpenCV绘制凸折线。

步骤
1. 导入必要的库

我们首先需要导入必要的库,使用cv2库即可。

import cv2
import numpy as np
2. 创建画布并绘制多边形

我们需要创建一个空白的画布,并在其上绘制任意的多边形。这个多边形可以是手动绘制的,也可以是通过其他计算方法而得出的多边形。

img = np.zeros((512,512,3), np.uint8)
pts = np.array([[10,50],[400,50],[90,200],[50,500],[450,400]], np.int32)
cv2.polylines(img,[pts],True,(0,255,255))
3. 计算凸包

我们使用cv2.convexHull()函数来计算凸包。该函数需要一个多边形的集合作为输入,并返回凸包的点集。我们可以直接在原图像上绘制凸包。

hull = cv2.convexHull(pts)
cv2.polylines(img,[hull],True,(0,0,255))
4. 显示图片

最后,我们使用cv2.imshow()函数显示生成的图像。

cv2.imshow('Convex Hull',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
完整代码
import cv2
import numpy as np

img = np.zeros((512,512,3), np.uint8)
pts = np.array([[10,50],[400,50],[90,200],[50,500],[450,400]], np.int32)
cv2.polylines(img,[pts],True,(0,255,255))

hull = cv2.convexHull(pts)
cv2.polylines(img,[hull],True,(0,0,255))

cv2.imshow('Convex Hull',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果展示

Convex Hull Image

结果展示了原绘制的多边形(黄色)和计算得出的凸包(红色)。可以看到,凸包包括了原多边形的所有边界点,且整体的形状呈现凸多边形的形态。