关于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
相关产品推荐
相关产品推荐

