使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
importcv2
frommatplotlibimportpyplotasplt
importnumpyasnp
img=cv2.imread('39.jpg')#加载图片
cv2.namedWindow('Cannyedgedetect')#设置窗口,cv2.WINDOW_NORMAL表示窗口大小可自动调节
cv2.namedWindow('OriginalImage',cv2.WINDOW_NORMAL)
cv2.namedWindow('CannyedgeImage',cv2.WINDOW_NORMAL)
defnothing(x):#回调函数
pass
#创建两个滑动条,分别控制minVal(最小阈值)、maxVal(最大阈值).
#minVal:滑动条名称;'Cannyedgedetect':窗口名;60:滑动条默认滑动位置;300:最大值;nothing:回调函数
cv2.createTrackbar('minVal','Cannyedgedetect',60,300,nothing)
cv2.createTrackbar('maxVal','Cannyedgedetect',100,400,nothing)
while(1):
#获得滑动条所在的位置
#cv2.getTrackbarPos(滑动条名称,窗口名);
minVal=cv2.getTrackbarPos('minVal','Cannyedgedetect')
maxVal=cv2.getTrackbarPos('maxVal','Cannyedgedetect')
#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('OriginalImage',img)#原图
cv2.imshow('CannyedgeImage',edgeImage)#Canny检测后的图
k=cv2.waitKey(1)
ifk==ord('w')&0xFF:#按w退出
break
cv2.destroyAllWindows()#销毁窗口
效果图如下。
总结
以上所述是小编给大家介绍的使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。