基于树莓派的openCv + Python的基础图像处理(三)

很抱歉,由于学业繁忙好久没有继续这个主题, 本篇文章承接上一篇文章,才疏学浅,我主要以我的小测试为例展开,并不可能涵盖所有图像处理,希望能帮助到大家或者希望大家指正~

Canny边缘检测算法

边缘检测是基于灰度突变来分割图像的常用方法,其实质是提取图像中不连续部分的特征。目前常见边缘检测算子有差分算子、Roberts算子、Sobel算子、Prewitt算子、Log算子以及Canny算子等。此处我采用了Canny算法

Canny 边缘检测分为如下几个步骤:

步骤 1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。上一篇有例子,在此不在赘述
步骤 2:计算梯度的幅度与方向。
步骤 3:非极大值抑制,即适当地让边缘“变瘦”。
步骤 4:确定边缘。使用双阈值算法确定最终的边缘信息。

Canny 函数及使用

OpenCV 提供了函数 cv2.Canny()来实现 Canny 边缘检测,其语法形式如下:

// 用法如下
canny = cv2.Canny( image, threshold1, threshold2[, apertureSize[, L2gradient]])

第一个参数:
传入之前由高斯滤波完成的单通道图片。
第二/三个参数:
这两个参数都是阈值
如果边缘像素的梯度值高于高阈值,则将其标记为强边缘像素;
如果边缘像素的梯度值小于高阈值并且大于低阈值,则将其标记为弱边缘像素;
如果边缘像素的梯度值小于低阈值,则会被抑制。
如果边缘像素的梯度值大于低阈值且小于高阈值,进一步比较:
如果其领域内有强边缘像素,保留,如果没有,剔除。
推荐的高低阈值比在2:13:1之间。
两个阈值都很大的时候会保留较少的边界信息,两个阈值都很小的时候会保留较多的边界信息

//我的应用 我省略了最后的参数,只写了两个阈值
canny = cv2.Canny(blur, 50 ,150 )

本实验完整代码

#find out-line ,and change it into 1/0

import cv2
import numpy as np

image = cv2.imread('test_image.jpg')
lane_image = np.copy(image)
gray = cv2.cvtColor(lane_image, cv2.COLOR_RGB2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)

canny = cv2.Canny(blur, 50 ,150 )
cv2.imshow("result", canny)
cv2.waitKey(0)

以下是我实验用的图片

在这里插入图片描述

实验结果

在这里插入图片描述