import cv2 as cv img = cv.imread('yb.jpg') gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #转换为灰度图像 cv.imshow("yb",img) cv.imshow('gray', gray) ret, binary = cv.threshold(gray, 122, 255, cv.THRESH_BINARY_INV) #对灰度图像进行二值化处理 cv.imshow('binary', binary) contours, hierarchy = cv.findContours(binary, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE) #hierarchy是轮廓之间的层级关系 # 对二值化图像进行轮廓检测 print(type(contours)) cv.drawContours(img, contours, -1, (0, 0, 255), 2) # 在原始图像上绘制红色轮廓 cv.imshow('contours', img) for cnt in contours: area = cv.contourArea(cnt) #计算轮廓的面积 arclength = cv.arcLength(cnt, True) #封闭轮廓的周长 print('area=%.2f, arcLength=%.2f' % (area, arclength)) print('轮廓个数', len(contours)) print(type(contours[0])) cv.waitKey(0) cv.destroyAllWindows()为什么这个代码contours属性打印的是list不是tuple
时间: 2024-04-01 13:35:48 浏览: 82
在 OpenCV 3 及以上版本中,`cv2.findContours()` 函数返回的不再是 (contours, hierarchy) 的元组,而是只返回 contours 列表。因此,当你运行这段代码时,`type(contours)` 输出的类型是 list,而不是 tuple。
如果你使用的是 OpenCV 2 版本,则 `cv2.findContours()` 函数返回的是 (contours, hierarchy) 的元组,这时 `type(contours)` 的输出类型是 numpy.ndarray,而不是 list 或 tuple。
阅读全文