# 查找轮廓并计数 contours, hierarchy = cv2.findContours(opened, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) count = len(contours) # 在图像上绘制人脸框和计数器 for i in range(count): # 获取当前轮廓的矩形信息 x, y, w, h = contours[i][0][0], contours[i][0][1], contours[i][0][2], contours[i][0][3] # 在原始图像上绘制人脸框 cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2) # 在新的图像上绘制人脸框个数计数器 count_text = str(i + 1) if i + 1 < 10 else '10+' # 如果计数器小于10则补零,否则补'10+'表示超过10个 cv2.putText(img, count_text, (x - 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), thickness=2) # 显示结果图像 cv2.imshow('result', img) cv2.waitKey(0) cv2.destroyAllWindows()修改一下错误
时间: 2024-01-20 18:02:32 浏览: 19
在这段代码中,`cv2.findContours()`函数的返回值已经正确地赋值给了`contours`和`hierarchy`变量。但是,在循环中获取轮廓矩形信息时,出现了错误。正确的获取方式是:
```python
x, y, w, h = cv2.boundingRect(contours[i])
```
`cv2.boundingRect()`函数可以获取一个轮廓的外接矩形,也就是将轮廓包围在一个矩形框内,返回该矩形框的左上角坐标和宽高。所以,可以用上面这行代码来获取当前轮廓的矩形信息。
另外,计数器应该从0开始计数,所以在绘制计数器时,应该是`count_text = str(i)`。
修改后的代码如下:
```python
# 查找轮廓并计数
contours, hierarchy = cv2.findContours(opened, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
count = len(contours)
# 在图像上绘制人脸框和计数器
for i in range(count):
# 获取当前轮廓的矩形信息
x, y, w, h = cv2.boundingRect(contours[i])
# 在原始图像上绘制人脸框
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
# 在新的图像上绘制人脸框个数计数器
count_text = str(i) if i < 9 else '10+' # 如果计数器小于9则补零,否则补'10+'表示超过10个
cv2.putText(img, count_text, (x - 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), thickness=2)
# 显示结果图像
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```