cv2.error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\contours.cpp:197: error: (-210:Unsupported format or combination of formats) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function 'cvStartFindContours_Impl'
时间: 2023-07-21 13:08:43 浏览: 225
这个错误通常是由于图像类型不匹配或图像为空引起的。在使用 `cv2.findContours()` 函数之前,需要确保输入图像是单通道的灰度图像 (CV_8UC1)。
你可以尝试将图像转换为灰度图像,然后再应用 `cv2.findContours()` 函数。下面是一个修改后的示例代码:
```python
import cv2
import numpy as np
# 加载彩色图像
image = cv2.imread("image.jpg")
# 将图像转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 定义要查找的颜色范围(以灰度阈值表示)
lower_color = 100 # 最低颜色值
upper_color = 255 # 最高颜色值
# 应用颜色阈值,将在指定颜色范围内的像素置为白色,其他像素置为黑色
ret, threshold = cv2.threshold(gray, lower_color, upper_color, cv2.THRESH_BINARY)
# 寻找轮廓
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历每个轮廓
for contour in contours:
# 计算边界框
x, y, width, height = cv2.boundingRect(contour)
# 绘制边界框
cv2.rectangle(image, (x, y), (x + width, y + height), (0, 255, 0), 2)
# 打印长度和宽度
print("长度:", width)
print("宽度:", height)
# 显示结果图像
cv2.imshow("Result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先加载彩色图像,然后将其转换为灰度图像。接下来,我们使用灰度阈值将图像中指定颜色范围内的像素置为白色,其他像素置为黑色。然后应用 `cv2.findContours()` 函数来寻找轮廓,并按照之前的方法进行边界框的计算和可视化。
如果你仍然遇到问题,请确保输入图像的格式正确,并检查图像是否为空。另外,也可以尝试更新 OpenCV 版本,可能会解决一些兼容性问题。
阅读全文