You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于FindContours仅支持CV_8UC1图像报错的技术求助

解决FindContours supports only CV_8UC1 images错误

兄弟,问题出在你getContours函数的参数传递上!你前面辛辛苦苦做了灰度转换、模糊、Canny边缘检测,得到了符合要求的单通道边缘图shapes_edges,结果调用cv2.findContours的时候,传进去的居然是原始的彩色图像shapes(3通道BGR格式),这可不就触发错误了嘛!

cv2.findContours确实只支持单通道的8位灰度图(CV_8UC1),你的shapes_edges是完全符合要求的,只是没传对参数而已。

给你修正后的代码,重点看getContours函数里的参数变化:

import cv2
import numpy as np

shapes= cv2.imread('E:\Photos\shapes.jpg') 
shapes= cv2.resize(shapes, (640,360)) 
shapes_gray= cv2.cvtColor(shapes, cv2.COLOR_BGR2GRAY) 
shapes_blur= cv2.GaussianBlur(shapes_gray, (5, 5), 1) 
shapes_edges= cv2.Canny(shapes_blur, 50, 50) 
blank= np.zeros_like(shapes) 

def getContours(img): 
    # 这里把shapes改成传入的img参数,也就是我们处理好的边缘图
    contours, hierarchy= cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    for i in contours: 
        area= cv2.contourArea(i) 
        print(area) 
    # 补充返回值,避免print输出None
    return contours

# 调用时传入处理好的shapes_edges
print(getContours(shapes_edges))

另外提一句,你原来的getContours函数没有返回值,直接print会输出None,我顺便给加上了返回轮廓的代码,要是用不上可以删掉~

内容的提问来源于stack exchange,提问作者Nakkhatra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:31:39