时间:2022-11-04 09:54:00 | 栏目:Python代码 | 点击:次
【OpenCV】⚠️高手勿入! 半小时学会基本操作⚠️ 边缘检测
OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 12 课)
Scharr 算子和 Sobel 算子基本一样. 只是卷积核系数不同. Scharr 算子对边界更加敏感, 也更容易误判.
卷积核参数:
例子:
# Scharr 算子 scharr_x = cv2.Scharr(img, cv2.CV_64F, 1, 0) scharr_y = cv2.Scharr(img, cv2.CV_64F, 0, 1) # 取绝对值 scharr_x = cv2.convertScaleAbs(scharr_x) scharr_y = cv2.convertScaleAbs(scharr_y) # 融合 scharr_xy = cv2.addWeighted(scharr_x, 0.5, scharr_y, 0.5, 0) # 展示图片 cv2.imshow("scharr_xy", scharr_xy) cv2.waitKey(0) cv2.destroyAllWindows()
输出结果:
拉普拉斯算子 (Laplacian) 是图像二阶空间导数的二维向同性测度. 拉普拉斯算子可以突出图像中强度发生快速变化的区域, 因此常用在边缘检测任务当中.
在进行 Laplacian 操作之前通常需要先用高斯平滑滤波器 (Gaussian Blur) 降低 Laplacian 算子对于噪声的敏感性.
卷积核参数:
例子:
# 读取图片, 并准换成灰度图 img = cv2.imread("Mona_Lisa.jpg", cv2.IMREAD_GRAYSCALE) # 高斯滤波器 (3 X 3) img = cv2.GaussianBlur(img, (3, 3), sigmaX=0.1) # Laplacian 算子 laplacian = cv2.Laplacian(img, cv2.CV_64F) # 取绝对值 laplacian = cv2.convertScaleAbs(laplacian) # 展示图片 cv2.imshow("laplacian", laplacian) cv2.waitKey(0) cv2.destroyAllWindows()
输出结果:
注: Sigma 值越小, 模板的中心系数就越大, 周围的系数较小, 平滑的效果就不是很明显.
Canny 边缘检测是非常流行的一种边缘检测算法, 由 John Canny 在 1986 年提出.
步骤:
# 读取图片, 并转换成灰度图 img = cv2.imread("Mona_Lisa.jpg", cv2.IMREAD_GRAYSCALE) # Canny边缘检测 out1 = cv2.Canny(img, 50, 150) out2 = cv2.Canny(img, 100, 150) # 合并 canny = np.hstack((out1, out2)) # 展示图片 cv2.imshow("canny", canny) cv2.waitKey(0) cv2.destroyAllWindows()
输出结果: