这是一个困难的图像应用简单的边缘检测由于石头和混凝土纹理。纹理使它几乎就像你有一个非常嘈杂的图像,你正在应用一阶导数。最终会有许多不希望看到的小边。在
以下是您的代码正在工作(不会导致错误):import scipy.ndimage as nd
import numpy as np
import matplotlib.pyplot as plt
im = scipy.ndimage.imread('ygqCd.jpg', True)
im = im.astype('int32')
dx = nd.sobel(im,1)
dy = nd.sobel(im,0)
mag = np.hypot(dx,dy)
mag *= 255.0/np.max(mag)
fig, ax = plt.subplots()
ax.imshow(mag, cmap = 'gray')
plt.xticks([]), plt.yticks([])
plt.show()
图像读取行scipy.ndimage.imread('ygqCd.jpg', True)正在转换为灰度。见ndimage.imread
和输出图像(如预期的那样非常嘈杂):
我对cv2比较熟悉。在应用sobel之前,我用cv2.sobel和中值滤波来处理图像。以下是结果,虽然不是很好,但却是一个良好的开端:
以及生成图像的代码:
^{pr2}$