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 创建的窗口。