实现了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