

import cv2
img = cv2.imread('star.png')
cv2.imshow('pic', img)
img2 = cv2.Canny(img, 200, 300)
cv2.imshow('pic2', img2)
h = cv2.findContours(img2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
print(type(h[0]))
print(len(h[0]))
print(type(h[1]))
cv2.drawContours(img,h[0],-1,(0,0,255),4)
cv2.imshow('contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2:
导入 OpenCV 库,它是一个功能强大的图像处理和计算机视觉库。
img = cv2.imread('star.png'):
使用 cv2.imread 函数读取名为 'star.png' 的图像文件,并将其存储在变量 img 中。img 是一个 NumPy 数组。
cv2.imshow('pic', img):
使用 cv2.imshow 函数显示图像 img,窗口的标题是 'pic'。
img2 = cv2.Canny(img, 200, 300):
使用 Canny 算法从图像 img 中检测边缘。Canny 算法是一个多级算法,用于从图像中准确地检测边缘。200 和 300 分别是该算法的低阈值和高阈值,用于确定边缘。
cv2.imshow('pic2', img2):
显示经过 Canny 算法处理后的图像 img2,窗口标题是 'pic2'。
h = cv2.findContours(img2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE):
cv2.findContours 函数用于在二值图像 img2 中查找所有轮廓。cv2.RETR_EXTERNAL 表示只检索最外层的轮廓,cv2.CHAIN_APPROX_NONE 表示存储整个轮廓链,不执行轮廓近似。函数返回的 h 是一个包含两个元素的列表:
h[0] 是轮廓点的数组,
h[1] 是与轮廓相关的循环(或“层次”)数组。
print(type(h[0])):
打印轮廓点数组 h[0] 的类型。
print(len(h[0])):
打印轮廓点数组 h[0] 中轮廓的数量。
print(type(h[1])):
打印轮廓层次数组 h[1] 的类型。
cv2.drawContours(img, h[0], -1, (0, 0, 255), 4):
使用 cv2.drawContours 函数在原始图像 img 上绘制轮廓。h[0] 是要绘制的轮廓数组,-1 表示绘制所有轮廓,(0, 0, 255) 是轮廓的颜色(红色),4 是轮廓的粗细。
cv2.imshow('contours', img):
显示绘制了轮廓的图像 img,窗口标题是 'contours'。
cv2.waitKey(0):
等待用户按下任意键。0 表示无限期地等待按键输入。
cv2.destroyAllWindows():
销毁所有由 OpenCV 创建的窗口。