OpenCV Python 3 实现滑动条动态调整 Canny 边缘检测

顾星河
顾星河
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何利用 OpenCV 和 Python 3 实现基于滑动条的 Canny 边缘检测功能。通过创建最小和最大阈值滑动条,用户可以实时调整参数以优化边缘提取效果。代码包含窗口管理、回调函数处理及实时图像显示,适用于图像处理的交互式学习与实践。

OpenCV Python 3 实现滑动条动态调整 Canny 边缘检测


import cv2
from matplotlib import pyplot as plt
import numpy as np
img= cv2.imread('39.jpg')#加载图片
cv2.namedWindow('Canny edge detect')#设置窗口,cv2.WINDOW_NORMAL表示窗口大小可自动调节
cv2.namedWindow('Original Image',cv2.WINDOW_NORMAL)
cv2.namedWindow('Canny edgeImage',cv2.WINDOW_NORMAL)
def nothing(x):#回调函数
  pass
#创建两个滑动条,分别控制minVal(最小阈值)、maxVal(最大阈值).
# minVal:滑动条名称; 'Canny edge detect':窗口名; 60:滑动条默认滑动位置; 300:最大值 ; nothing:回调函数
cv2.createTrackbar('minVal','Canny edge detect',60,300,nothing)
cv2.createTrackbar('maxVal','Canny edge detect',100,400,nothing)
while(1):
  #获得滑动条所在的位置
  #cv2.getTrackbarPos(滑动条名称,窗口名);
  minVal = cv2.getTrackbarPos('minVal','Canny edge detect')
  maxVal = cv2.getTrackbarPos('maxVal','Canny edge detect')
  #Canny边缘检测
  #cv2.Canny函数参数解析:
  # img:原图像名
  # minVal:最小梯度
  # maxVal:最大梯度
  # 5 :5*5大小的高斯滤波器(卷积核),用来消除噪声影响
  # L2gradient :求图像梯度,从而进行去除非边界上的点(非极大值抑制)
  edgeImage = cv2.Canny(img,minVal,maxVal,5,L2gradient=True)

L2gradient 参数用于设定计算梯度大小的方程。若将其设置为 True,系统将采用特定的梯度计算公式。

若该参数设置为 False,则使用另一种不同的计算公式。

在此公式中,Gx 和 Gy 分别代表利用 Sobel 算子计算出的水平方向和垂直方向的一阶导数。


 #显示图片
  cv2.imshow('Original Image',img) #原图
  cv2.imshow('Canny edgeImage',edgeImage) # Canny检测后的图

  k = cv2.waitKey(1)
  if k ==ord('w')& 0xFF: # 按 w 退出
    break
cv2.destroyAllWindows()#销毁窗口

处理后的效果如下图所示。

总结

上述内容介绍了如何使用 OpenCV 结合 Python 3 实现通过滑动条动态更新 Canny 边缘检测图像的功能,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!如果您觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表