通过抑制孤立的弱边缘最终完成边缘检测。
edges = cv2.Canny( image, threshold1, threshold2[, apertureSize[, L2gradient]])
代码如下,
import cv2
img=cv2.imread("cjavapy.jpg",cv2.IMREAD_GRAYSCALE)
r1=cv2.Canny(img,128,200)
r2=cv2.Canny(img,32,128)
cv2.imshow("original",o)
cv2.imshow("result1",r1)
cv2.imshow("result2",r2)
cv2.waitKey()
cv2.destroyAllWindows()
应用非极大值抑制,以消除边缘检测带来的杂散响应。
使用高斯滤波器,以平滑像,滤除噪声。
代码如下,
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读图
img = cv2.resize(cv2.imread("cjavapy.png", 0), (400, 400))
# 傅里叶变换
img_fft = np.fft.fft2(img)
img_fft_shift = np.fft.fftshift(img_fft)
img_fft_shift_ = 20 * np.log(np.abs(img_fft_shift))
# 频域滤波
img_fft_shift_process = img_fft_shift[:]
print(img_fft_shift_process.shape)
h, w = img_fft_shift_process.shape[:2]
ch, cw = h // 2, w // 2
img_fft_shift_process[ch - 50:ch + 50, cw - 50:cw + 50] = -10. # 高通滤波
img_fft_shift_process_ = 20 * np.log(np.abs(img_fft_shift_process))
# 傅里叶逆变换
img_fft_ishift = np.fft.ifftshift(img_fft_shift_process)
img_ifft = np.fft.ifft2(img_fft_ishift)
img_ifft_ = np.abs(img_ifft)
# 显示
plt.subplot(2, 2, 1)
plt.imshow(img, cmap="gray")
plt.subplot(2, 2, 2)
plt.imshow(img_fft_shift_, cmap="gray")
plt.subplot(2, 2, 3)
plt.imshow(img_fft_shift_process_, cmap="gray")
plt.subplot(2, 2, 4)
plt.imshow(img_ifft_, cmap="gray")
plt.show()
plt.close()
应用双阈值检测来确定真实的和潜在的边缘。
计算像中每个像素点的梯度强度和方向。
参数如下,
image | 8 位输入图像。 |
threshold1 | 处理过程中的第一个阈值。 |
threshold2 | 处理过程中的第二个阈值。 |
apertureSize | Sobel 算子的孔径大小。 |
L2gradient | 为计算图像梯度幅度(gradient magnitude)的标识。其默认值为 False。如果为 True,则使用更精确的 L2 范数进行计算(即两个方向的导数的平方和再开方),否则使用 L1 范数(直接将两个方向导数的绝对值相加)。 |
文章为作者独立观点,不代表股票交易接口观点