本文主要是介绍OpenCV自学笔记3:Canny边缘检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Canny边缘检测
引言
OpenCV提供了Canny边缘检测函数,只用一行代码就能实现图像的边缘检测,看到这里你是不是很激动呢?
—————————————————————————-
Canny边缘检测实例
# -*- coding:utf-8 -*-import cv2image = cv2.imread('images/test.jpg')
cv2.namedWindow("Image")# Canny函数,三个参数:源图像,低阈值,高阈值
image = cv2.Canny(image, 200, 300)cv2.imshow("Image", image)cv2.waitKey(0)
程序的运行结果如下:
—————————————————————————-
自己写一个小Demo 模拟边缘检测
# -*- coding:utf-8 -*-import cv2
import numpy as npimage = cv2.imread('images/test.jpg')# Step1. 自定义Sobel卷积核
kernel_x = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]])kernel_y = np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -1]])# Step2. 初始化中间结果矩阵
gx = np.zeros(image.shape, dtype = np.uint8)
gy = np.zeros(image.shape, dtype = np.uint8)# Step3. 使用自定义的卷积核进行卷积
cv2.filter2D(image, -1, kernel_x, gx)
cv2.filter2D(image, -1, kernel_y, gy)
# 显示卷积的中间结果
cv2.imshow("gx", gx)
cv2.imshow("gy", gy)# Step4. 合并两个图像
gx = cv2.addWeighted(gx, 0.5, gy, 0.5, 0)
cv2.imshow("gx2", gx)# Step5. 阈值抑制处理
thresh = 50 #阈值设置为50
ret, dst = cv2.threshold(gx, thresh, 255, cv2.THRESH_BINARY)
cv2.imshow("ss", dst)cv2.waitKey(0)
程序的运行结果如下:
可以看到,程序简单提取了图像中的边缘。当然,如果要实现完整的Canny边缘检测,还需要进行非极大值抑制和边缘跟踪。
有关Canny边缘检测的C++源码分析,请看这里
这篇关于OpenCV自学笔记3:Canny边缘检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!