(E) Exception caught in handler {"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", "worker_id": "0"}这个报错怎么办
时间: 2024-04-18 08:23:57 浏览: 265
RAW-socket-caught-procedures.rar_Linux/Unix编程_Unix_Linux_
这个报错是由于 `cv2.findContours()` 函数在处理图像时遇到了不支持的格式或组合格式。
错误信息中提到,`findContours()` 函数在 `mode` 参数不等于 `CV_RETR_FLOODFILL` 时,只支持 `CV_8UC1` 格式的图像;而在 `mode` 参数为 `CV_RETR_FLOODFILL` 时,只支持 `CV_32SC1` 格式的图像。
要解决这个问题,你可以尝试检查和调整输入图像的格式,确保它符合 `findContours()` 函数的要求。具体来说,需要确保输入图像是单通道(灰度图像)且数据类型为 `np.uint8` 或 `np.int32`。
以下是一些可能的解决方案:
1. 确保 `mask_binary` 是灰度图像(单通道):你可以使用 `cv2.cvtColor()` 函数将其转换为灰度图像。例如:`mask_binary = cv2.cvtColor(mask_binary, cv2.COLOR_BGR2GRAY)`。
2. 确保 `mask_binary` 的数据类型是正确的:你可以使用 `astype()` 函数将其转换为正确的数据类型。例如:`mask_binary = mask_binary.astype(np.uint8)` 或 `mask_binary = mask_binary.astype(np.int32)`。
3. 检查 `cv2.findContours()` 函数的参数:确保你正确地传递了 `cv2.RETR_EXTERNAL` 和 `cv2.CHAIN_APPROX_SIMPLE` 作为参数。
请根据你的实际情况尝试这些解决方案,并查看是否能够解决问题。如果问题仍然存在,请提供更多的代码和上下文信息,以便更好地帮助你解决问题。
阅读全文