先上代码
python
import cv2
import numpy as np
# 1. 读取图片
img = cv2.imread("test.jpg")
# 2. 预处理:灰度 + 模糊(必须做,不然轮廓很乱)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
# 3. Canny边缘检测
canny = cv2.Canny(blur, 50, 150)
# 4. 寻找轮廓(核心!)
contours, hierarchy = cv2.findContours(
canny, # 边缘图
cv2.RETR_EXTERNAL, # 只找最外层轮廓
cv2.CHAIN_APPROX_SIMPLE # 简化轮廓点(提速)
)
# 打印找到几个物体
print(f"找到 {len(contours)} 个物体轮廓!")
# 5. 把所有轮廓画出来(红色,粗细2)
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 6. 显示结果
cv2.imshow("Canny Edge", canny)
cv2.imshow("Detected Contours", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 寻找轮廓
cv2.findContours(边缘图, 模式, 方法)
- 画轮廓
cv2.drawContours(原图, 轮廓列表, 画第几个, 颜色, 粗细)
-1 :画所有轮廓
- 运行效果
