contourArea(contours[i]); 显示报错为明显调用的表达式前的括号必须具有(指针)函数类型
时间: 2024-05-23 09:14:06 浏览: 41
这个错误通常是因为 `contours[i]` 不是一个合法的轮廓对象,或者 `contourArea` 函数的参数类型不正确。
请确保你已经正确地导入了 OpenCV 库,然后检查以下几点:
1. `contours[i]` 是否是一个有效的轮廓对象?你可以先检查一下 `contours` 列表的长度是否大于等于 `i+1`,以确保该轮廓对象存在。
2. `contourArea` 函数的参数类型是否正确?该函数需要接收一个轮廓对象作为输入,你可以尝试使用 `type(contours[i])` 来查看该轮廓对象的类型是否正确。
如果以上两个方面都没有问题,你可以尝试重新编译代码,或者更新 OpenCV 库到最新版本。
相关问题
在opencv中解释 area = contourArea(contours[i]);
这行代码的作用是计算轮廓(contours[i])的面积,并将结果保存在变量area中。在OpenCV中,轮廓是由一系列点组成的闭合曲线,area函数可以计算出该曲线所围成的面积大小。具体实现可以参考以下代码:
```python
# 导入库
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 计算轮廓面积
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
print("Contour %d area: %.2f" % (i, area))
```
输出结果如下:
```python
Contour 0 area: 8135.50
Contour 1 area: 516.50
Contour 2 area: 125.50
Contour 3 area: 51.50
```
这里的轮廓分别表示图像中的四个物体,可以看到输出结果中每个轮廓的面积都被计算出来了。
area = cv2.contourArea(contours[i]) TypeError: only integer scalar arrays can be converted to a scalar index
这个错误通常是由于 `cv2.contourArea()` 函数的输入参数不正确导致的。函数 `cv2.contourArea()` 的输入参数应该是轮廓的索引,而不是轮廓本身。因此,你需要检查一下传递给函数的参数是否正确。
如果你已经将轮廓转换为整数类型,则可能会出现这个错误。你可以尝试将其转换为整数类型,如下所示:
```
area = cv2.contourArea(contours[i].astype('int'))
```
如果你仍然遇到这个错误,你可以尝试检查一下 contours[i] 的值是否存在问题。你可以使用 `print` 函数来查看 contours[i] 的值,并确保它是一个整数类型的数组。