contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)中contours, hierarchy什么意思?
时间: 2024-06-03 19:08:48 浏览: 151
contours表示轮廓的列表,每个轮廓都是一个Numpy数组,表示一系列的点(x,y)坐标,这些点连接起来形成了轮廓的边界。
hierarchy表示轮廓的层次结构,它是一个包含四个元素的Numpy数组,每个元素都是一个整数数组。第一个元素表示下一个兄弟轮廓的索引,第二个元素表示前一个兄弟轮廓的索引,第三个元素表示第一个子轮廓的索引,第四个元素表示父轮廓的索引。如果轮廓没有下一个兄弟轮廓,前一个兄弟轮廓,子轮廓或父轮廓,则对应元素的值为-1。通过分析层次结构,可以找到每个轮廓的关系,例如找到所有子轮廓或父轮廓。
相关问题
import cv2import numpy as np# 读取图像image = cv2.imread('工件图像.jpg')# 转换为灰度图像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用二值化处理获取缺陷图像ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 使用形态学操作进行缺陷的去噪和填充kernel = np.ones((3,3), np.uint8)closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, kernel)# 获取缺陷轮廓contours, hierarchy = cv2.findContours(opening, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 遍历每一个缺陷,提取几何特征并绘制位置for i in range(len(contours)): # 获取面积和周长 area = cv2.contourArea(contours[i]) perimeter = cv2.arcLength(contours[i], True) # 获取质心 moments = cv2.moments(contours[i]) cx = int(moments['m10'] / moments['m00']) cy = int(moments['m01'] / moments['m00']) # 绘制位置和特征 cv2.drawContours(image, [contours[i]], -1, (0, 255, 0), 2) cv2.circle(image,(cx,cy), 5, (0,0,255), -1) cv2.putText(image, "Area: {:.2f}".format(area), (cx+10, cy-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2) cv2.putText(image, "Perimeter: {:.2f}".format(perimeter), (cx+10, cy+10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2)# 显示结果cv2.imshow('Defect Detection', image)cv2.waitKey(0)# 保存结果cv2.imwrite('Defect Detection.jpg', image)
这是Python中的两个库,cv2是OpenCV库,用于图像和视频处理,包括读取、写入、显示、处理、分析等。numpy是一个数学库,用于处理数字和数组。一般情况下,当我们读取图像时,使用cv2,而对图片进行处理时,使用numpy。
img2, contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)什么意思
这是一段 Python 代码,其中使用了 OpenCV 库中的 findContours 函数,用于在二进制图像中检测并提取轮廓信息。其中的参数 thresh 是输入的二值图像,contours 是存储轮廓点集的变量,hierarchy 是存储轮廓之间层级结构的变量。RETR_TREE 表示提取所有轮廓并建立完整的轮廓层级结构,CHAIN_APPROX_SIMPLE 则表示对轮廓的边界点进行压缩。
阅读全文