使用opencv识别图像轮廓并且给出轮廓数据
时间: 2023-07-30 08:07:06 浏览: 27
好的,以下是使用OpenCV进行图像轮廓识别并给出轮廓数据的Python代码:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行阈值处理
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 找出轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 输出轮廓数量
print('Number of contours:', len(contours))
# 遍历轮廓
for i, contour in enumerate(contours):
# 输出每个轮廓的数据
print('Contour %d:' % i)
print(' - Area:', cv2.contourArea(contour))
print(' - Perimeter:', cv2.arcLength(contour, True))
print(' - Bounding box:', cv2.boundingRect(contour))
print(' - Convex hull:', cv2.convexHull(contour))
print(' - Moments:', cv2.moments(contour))
```
解释一下代码:
1. 首先读取图像并将其转换为灰度图像。
2. 接着进行阈值处理,得到一个二值图像。
3. 使用 `cv2.findContours()` 函数找出图像中的轮廓。
4. 输出轮廓的数量。
5. 遍历每个轮廓,并输出其数据,包括面积、周长、边界框、凸包和矩等信息。
注意,由于 OpenCV 4.x 版本将 `cv2.findContours()` 函数的返回值进行了修改,因此需要使用 `_` 来接收轮廓数据以及层次结构数据。如果你使用的是 OpenCV 3.x 版本,则可以直接使用 `contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)`。
相关推荐















