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-04-26 20:04:01 浏览: 422
这个错误是由OpenCV中的findContours函数引起的,它要求输入的图像格式必须为cv_8uc1或cv_32sc1。如果使用的是cv_retr_floodfill模式,则只支持cv_32sc1图像格式,而其他模式则只支持cv_8uc1图像格式。因此,您需要检查输入图像的数据类型是否正确,并根据需要调整它的类型,以便与所需的模式匹配。
相关问题
Exception caught in handler {"worker_id": "0", "exc": "OpenCV(4.8.0) /io/opencv/modules/imgproc/src/contours.cpp:195: 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'\n", "traceback": "Traceback (most recent call last):\n File \"/opt/nuclio/_nuclio_wrapper.py\", line 118, in serve_requests\n await self._handle_event(event)\n File \"/opt/nuclio/_nuclio_wrapper.py\", line 312, in _handle_event\n entrypoint_output = self._entrypoint(self._context, event)\n File \"/opt/nuclio/main.py\", line 51, in handler\n contours, _ = cv2.findContours(mask_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\ncv2.error: OpenCV(4.8.0) /io/opencv/modules/imgproc/src/contours.cpp:195: 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'\n\n"} 2023-07-16 10:23:22 /opt/nuclio/_nuclio_wrapper.py:395: DeprecationWarning: There is no current event loop 2023-07-16 10:23:22 loop = asyncio.get_event_loop() 2023-07-16 10:24:38 2023-07-16 10:24:40 0: 480x640 1 car, 1 truck, 82.9ms 2023-07-16 10:24:40 Speed: 16.6ms preprocess, 82.9ms inference, 24.2ms postprocess per image at shape (1, 3, 480, 640)
根据你提供的错误信息,问题出现在 `cv2.findContours()` 函数调用时。错误信息提示到了组合格式不受支持的问题。
这个问题通常是由于输入图像的格式不正确导致的。`cv2.findContours()` 函数需要传入一个二值图像(只包含0和255两个像素值)作为输入,而且图像的数据类型应为 `np.uint8`。
你可以尝试在调用 `cv2.findContours()` 函数之前,对 `mask_binary` 进行以下处理,确保输入图像符合要求:
```python
mask_binary = mask_binary.astype(np.uint8) # 将掩码二值图像转换为 np.uint8 类型
```
添加这行代码后,再次运行程序,看看是否能够解决问题。如果问题仍然存在,请确保 `mask_binary` 是一个正确的二值图像,并且数据类型是 `np.uint8`。你可以使用 `print(mask_binary.dtype)` 来检查数据类型,并使用 `print(mask_binary)` 来检查图像的值范围和格式。如果问题仍然存在,请提供更多代码和上下文信息,以便更好地帮助你解决问题。
OpenCV(4.0.1) C:\ci\opencv-suite_1573470242804\work\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'
这个错误提示表明在使用 cv2.findContours() 函数时,输入的图像格式不支持。findContours() 函数要求输入的图像为单通道(即灰度图像)且数据类型为 uint8,否则就会报错。
有两种可能的原因导致出现这个错误:
1. 输入的图像不是单通道灰度图像,可以通过 cv2.cvtColor() 转换为灰度图像。
2. 输入的图像数据类型不是 uint8,可以通过 cv2.convertScaleAbs() 转换为 uint8 类型。
你可以检查一下你的代码,看看是否满足以上两个条件。如果有任何疑问,欢迎继续提问。
阅读全文