Canny实现及与opencv的比较

本文介绍了作者实现Canny边缘检测算法的过程,并与OpenCV自带的Canny函数进行了比较。通过调整双限值,作者得到了不同的边缘检测结果。在实现中注意到了Python list可作为堆栈使用,numpy数组赋值需使用.copy()来避免指针问题。对比结果显示,OpenCV的Canny算法在滤除不重要边界和连接断点方面表现出色。
摘要由CSDN通过智能技术生成

实现了Canny,不过和opencv自带的效果不太一样,修改了Canny的双限值,得到效果图(cannyh是最大阙值图,cannyl是最小阙值图,canny是自带函数,my_canny是实现的效果图)。

实现过程中的问题和所得:1、list本身可以作为堆栈使用,python自带队列库(这次没用)。

2、numpy直接赋值会产生类似指针的效果,最好用.copy()。

3、对比图,canny的双阙值滤去了不重要的边界,还很好的连接了断点。

import cv2
import numpy as np
import matplotlib.pyplot as plt
pic=cv2.imread("C:\\Users\\acer\\Pictures\\book.jpg")
pic_float=pic.astype(np.float)
pic1=cv2.cvtColor(pic, cv2.COLOR_RGB2GRAY)

edge=cv2.Canny(pic1,100,220)

pic1=pic1.astype(np.float)
sobelx=cv2.Sobel(pic1,cv2.CV_64F,1,0,ksize=3)
sobely=cv2.Sobel(pic1,cv2.CV_64F,0,1,ksize=3)

my_edge=np.sqrt(sobelx*sobelx+sobely*sobely)
my_edge=my_edge.astype(np.uint8)

x=my_edge.shape[1]
y=my_edge.shape[0]
thr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值