3种python3的canny边缘检测之静态,可调节和自适应

Python014

3种python3的canny边缘检测之静态,可调节和自适应,第1张

先看高级版的python3的canny的自适应边缘检测:

内容:

1 canny的边缘检测的介绍。

2 三种方法的canny的边缘检测,由浅入深地介绍:固定值的静态,可自调节的,自适应的。

说明:

1 环境:python3.8、opencv4.5.3和matplotlib3.4.3。

2 图片:来自品阅网正版免费图库。

3 实现自适应阈值的canny边缘检测的参考代码和文章:

上述的代码,本机均有报错,故对代码进行修改,注释和运行。

初级canny:

1 介绍:opencv中给出了canny边缘检测的接口,直接调用:

即可得到边缘检测的结果ret,其中,t1,t2是需要人为设置的阈值。

2 python的opencv的一行代码即可实现边缘检测。

3 Canny函数及使用:

4 Canny边缘检测流程:

去噪 -->梯度 -->非极大值抑制 -->滞后阈值

5 代码:

6 操作和过程:

7 原图:

8 疑问:

ret = cv2.canny(img,t1,t2),其中,t1,t2是需要人为设置的阈值,一般人怎么知道具体数值是多少,才是最佳的呀?所以,这是它的缺点。

中级canny:

1 中级canny,就是可调节的阈值,找到最佳的canny边缘检测效果。

2 采用cv2.createTrackbar来调节阈值。

3 代码:

4 操作和效果:

5 原图:

高级canny:

1 自适应canny的算法:

ret = cv2.canny(img,t1,t2)

即算法在运行过程中能够自适应地找到较佳的分割阈值t1,t2。

2 文件结构:

3 main.py代码:

4 dog.py代码:

5 bilateralfilt.py代码:

6 原图:

7 效果图:本文第一个gif图,此处省略。

小结:

1 本文由浅入深,总结的很好,适合收藏。

2 对于理解python的opencv的canny的边缘检测,很有帮助。

3 本文高级版canny自适应的算法参考2篇文章,虽然我进行代码的删除,注释,修改,优化等操作,故我不标注原创,对原作者表达敬意。

4 自己总结和整理,分享出来,希望对大家有帮助。

1. 使用装饰器来衡量函数执行时间有一个简单方法,那就是定义一个装饰器来测量函数的执行时间,并输出结果: import time from functoolsimport wraps import random def fn_timer(function):   @wraps(function)   def function_timer(*args, **kwargs):       t0= time.time()       result= function(*args, **kwargs)       t1= time.time()       print("Total time running %s: %s seconds" %           (function.__name__, str(t1- t0)) )       return result return function_timer @fn_timer def random_sort(n):   return sorted([random.random() for i in range(n)]) if __name__== "__main__":   random_sort(2000000) 输出:Total time running random_sort: 0.6598007678985596 seconds 使用方式的话,就是在要监控的函数定义上面加上 @fn_timer 就行了 或者 # 可监控程序运行时间 import time import random def clock(func):     def wrapper(*args, **kwargs):         start_time= time.time()         result= func(*args, **kwargs)         end_time= time.time()         print("共耗时: %s秒" % round(end_time- start_time, 5))         return result return wrapper @clock def random_sort(n):   return sorted([random.random() for i in range(n)]) if __name__== "__main__":   random_sort(2000000) 输出结果:共耗时: 0.65634秒2. 使用timeit模块另一种方法是使用timeit模块,用来计算平均时间消耗。 执行下面的脚本可以运行该模块。这里的timing_functions是Python脚本文件名称。 在输出的末尾,可以看到以下结果:4 loops, best of 5: 2.08 sec per loop 这表示测试了4次,平均每次测试重复5次,最好的测试结果是2.08秒。 如果不指定测试或重复次数,默认值为10次测试,每次重复5次。3. 使用Unix系统中的time命令然而,装饰器和timeit都是基于Python的。在外部环境测试Python时,unix time实用工具就非常有用。 运行time实用工具: 输出结果为: Total time running random_sort: 1.3931210041 seconds real 1.49 user 1.40 sys 0.08 第一行来自预定义的装饰器,其他三行为:     real表示的是执行脚本的总时间     user表示的是执行脚本消耗的CPU时间。     sys表示的是执行内核函数消耗的时间。 注意:根据维基百科的定义,内核是一个计算机程序,用来管理软件的输入输出,并将其翻译成CPU和其他计算机中的电子设备能够执行的数据处理指令。 因此,Real执行时间和User+Sys执行时间的差就是消耗在输入/输出和系统执行其他任务时消耗的时间。4. 使用cProfile模块 5. 使用line_profiler模块6. 使用memory_profiler模块7. 使用guppy包

安装python3.10时,提示未检测到安装解决如下:

1、windows系统下的python3.10安装,主要是针对Windows开发,所以安装在windows10系统下。

2、先关闭cmd,再重新打开,然后输入python-version并回车。

3、打开后安装了cmd2.点击下载的安装包,选择修复,根据提示重试。

4、没有python版本,是环境变量没有设置好,打开系统环境变量的Path变量,查看是否有Python目录。