OpenCV:边缘检测算法

article/2025/9/15 12:05:03

边缘检测(英语:Edge detection)是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。 边缘检测是图像处理和计算机视觉中,尤其是特征检测中的一个研究领域。

1 边缘检测的基本原理

图像边缘是图像最基本的特征,所谓边缘(Edge) 是指图像局部特性的不连续性。灰度或结构等信息的突变处称之为边缘。例如,灰度级的突变、颜色的突变,、纹理结构的突变等。边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。

如图1所示,当我们看到一个有边缘的物体时,首先感受到的就是边缘

图1 灰度级跃变的边缘模型

图1(a)是一个理想的边缘所具备的特性。每个灰度级跃变到一个垂直的台阶上。而实际上,在图像采集系统的性能、采样率和获取图像的照明条件等因素的影响,得到的边缘往往是模糊的,边缘被模拟成具有“斜坡面”的剖面,如图1(b)所示,在这个模型中,模糊的边缘变得“宽”了,而清晰的边缘变得“窄”了。

图像的边缘有方向和幅度两种属性。边缘通常可以通过一阶导数二阶导数检测得到。一阶导数是以最大值作为对应的边缘的位置,而二阶导数则以过零点作为对应边缘的位置。


 

2 边缘检测算子分类

(1)一阶导数的边缘算子

通过模板作为核与图像的每个像素点做卷积和运算,然后选取合适的阈值来提取图像的边缘。常见的有Roberts算子、Sobel算子和Prewitt算子。

 

(2)二阶导数的边缘算子

依据于二阶导数过零点,常见的有Laplacian 算子,此类算子对噪声敏感。

 

(3)其他边缘算子

前面两类均是通过微分算子来检测图像边缘,还有一种就是Canny算子,其是在满足一定约束条件下推导出来的边缘检测最优化算子。


 

3 梯度

3.1 图像梯度

为了达到寻找边缘的目的,检测灰度变化可用一阶导数二阶导数来完成。下面将讨论一阶导数

为了在一幅图像f 的(x,y)位置处寻找边缘的强度和方向,所以选择的工具就是梯度,梯度用\nabla f来表示,并用向量来定义,定义如下所示:

                                                                             \nabla f\equiv \text{grad}(f)\equiv \left[ \begin{matrix} {​{g}_{x}} \\ {​{g}_{y}} \\ \end{matrix} \right]\equiv \left[ \begin{matrix} \frac{\partial f}{\partial x} \\ {} \\ \frac{\partial f}{\partial y} \\ \end{matrix} \right]

 

其中,梯度\nabla f 为一个向量,它表示f 在位置(x,y) 处的最大变化率的方向。

梯度\nabla f 的大小用M(x,y) 表示,则:

                                                                          M(x,y)=mag(\nabla f)=\sqrt{g_{x}^{2}+g_{y}^{2}}

其中,M(x,y) 表示梯度向量方向变化率的值。

 

数学梯度的简单推导

对于以为函数f(x) 在点 x 处的导数的近似:将函数f(x+\Delta x) 展开为 x 的泰勒级数,令\Delta x=1,且只保该级数的线性项,则函数f(x) 的梯度\nabla f 计算为:

                                                                      \nabla f=\frac{\partial f}{\partial x}={​{f}^{'}}(x)=f(x+1)-f(x)

 

3.2 梯度算子

由上面的数学推导可知,要得到一幅图像的梯度,则要求在图像的每个像素点位置处计算偏导数。我们处理的是数字量,因此要求关于一点的邻域上的偏导数的数字近似,因此一幅图像f ,在 (x,y) 位置处的 x 和 y 方向上的梯度大小 {g}_{x}} 和 {g}_{y}} 分别计算为:

                                                                       {​{g}_{x}}=\frac{\partial f(x,y)}{\partial x}=f(x+1,y)-f(x,y)

                                                                       {​{g}_{y}}=\frac{\partial f(x,y)}{\partial y}=f(x,y+1)-f(x,y)

上述两个公式对所有 x 和 y 的有关值可用下图的一维模板对 f(x,y) 的滤波得到。

用于计算梯度偏导数的滤波器模板,通常称之为梯度算子边缘算子边缘检测子等。

对于不同的滤波器模板得到的梯度是不同的,这也就衍生出很多算子,如Roberts、Prewitt、Sobel和Laplacian算子等。下面将详细介绍不同的算子。


 

4 Roberts 算子

4.1 基本原理

Roberts算子又称为交叉微分算法,它是基于交叉差分的梯度算法,通过局部差分计算检测边缘线条。常用来处理具有陡峭的低噪声图像,当图像边缘接近于正45度或负45度时,该算法处理效果更理想。其缺点是对边缘的定位不太准确,提取的边缘线条较粗。

Roberts算子的模板分为水平方向和垂直方向,如下式所示,从其模板可以看出,Roberts算子能较好的增强正负45度的图像边缘。

                                                                          {​{d}_{x}}=\left[ \begin{matrix} -1 & 0 \\ 0 & 1 \\ \end{matrix} \right]\begin{matrix} {} & {} \\ {} & {} \\ \end{matrix}{​{d}_{y}}=\left[ \begin{matrix} 0 & -1 \\ 1 & 0 \\ \end{matrix} \right]

例如,下面给出Roberts算子模板,在像素点P5处 x 和 y 方向上的梯度大小 {g}_{x}} 和 {g}_{y}} 分别计算为:

                                                                                   {​{g}_{x}}=\frac{\partial f}{\partial x}=\text{P9-P5}

                                                                                   {​{g}_{y}}=\frac{\partial f}{\partial y}=\text{P8-P6}

 

 

4.2 代码示例

在Python中,Roberts算子主要通过numpy定义模板,再调用OpenCV的 filter2D() 函数实现边缘提取。该函数主要是利用内核实现对图像的卷积运算。filter2D() 函数用法如下所示:

dst = filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

其中,参数:

src 表示输入图像;

dst 表示输出的边缘图,其大小和通道数与输入图像相同;

ddepth 表示目标图像所需的深度;

kernel 表示卷积核,一个单通道浮点型矩阵;

anchor 表示内核的基准点,其默认值为 (-1,-1),位于中心位置;

delta 表示在储存目标图像前可选的添加到像素的值,默认值为0;

borderType 表示边框模式。

代码如下所示:

import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread("test.jpg")
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #转成RGB 方便后面显示# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Roberts算子
kernelx = np.array([[-1, 0], [0, 1]], dtype=int)
kernely = np.array([[0, -1], [1, 0]], dtype=int)x = cv2.filter2D(grayImage, cv2.CV_16S, kernelx)
y = cv2.filter2D(grayImage, cv2.CV_16S, kernely)# 转uint8
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']# 显示图形
plt.subplot(121),plt.imshow(img_RGB),plt.title('原始图像'), plt.axis('off') #坐标轴关闭
plt.subplot(122),plt.imshow(Roberts, cmap=plt.cm.gray ),plt.title('Roberts算子'), plt.axis('off')
plt.show()

5 Prewitt 算子

5.1 基本原理

Prewitt算子是一种图像边缘检测的微分算子,其原理是利用特定区域内像素灰度值产生的差分实现边缘检测。由于Prewitt算子采用 3\times3 模板对区域内的像素值进行计算,而Robert算子的模板为 2\times2,故Prewitt算子的边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。Prewitt算子适合用来识别噪声较多、灰度渐变的图像,其计算公式如下所示:

                                                                  {​{d}_{y}}=\left[ \begin{matrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \\ \end{matrix} \right]\begin{matrix} {} & {} & {} \\ {} & {} & {} \\ {} & {} & {} \\ \end{matrix}{​{d}_{x}}=\left[ \begin{matrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \\ \end{matrix} \right]

例如,下面给出Prewitt算子模板,在像素点P5处 x 和 y 方向上的梯度大小 {g}_{x}} 和 {g}_{y}} 分别计算为:

                                                                {​{g}_{x}}=\frac{\partial f}{\partial x}=(\text{P7+P8+P9)-}(\text{P1+P2+P3)}

                                                                {​{g}_{y}}=\frac{\partial f}{\partial y}=(\text{P3+P6+P9)-}(\text{P1+P4+P7)}

 

5.2 代码示例

在Python中,Prewitt算子的实现过程与Roberts算子比较相似。通过Numpy定义模板,再调用OpenCV的filter2D() 函数实现对图像的卷积运算,最终通过 convertScaleAbs() 和 addWeighted() 函数实现边缘提取。filter2D() 函数用法如下所示:

dst = filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

其中,参数:

src 表示输入图像;

dst 表示输出的边缘图,其大小和通道数与输入图像相同;

ddepth 表示目标图像所需的深度;

kernel 表示卷积核,一个单通道浮点型矩阵;

anchor 表示内核的基准点,其默认值为(-1,-1),位于中心位置;

delta 表示在储存目标图像前可选的添加到像素的值,默认值为0;

borderType 表示边框模式。

代码如下所示:

import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread("test.jpg")
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #转成RGB 方便后面显示# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Roberts算子
kernelx = np.array([[-1, 0], [0, 1]], dtype=int)
kernely = np.array([[0, -1], [1, 0]], dtype=int)x = cv2.filter2D(grayImage, cv2.CV_16S, kernelx)
y = cv2.filter2D(grayImage, cv2.CV_16S, kernely)# 转uint8
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']# 显示图形
plt.subplot(121),plt.imshow(img_RGB),plt.title('原始图像'), plt.axis('off') #坐标轴关闭
plt.subplot(122),plt.imshow(Roberts, cmap=plt.cm.gray ),plt.title('Roberts算子'), plt.axis('off')
plt.show()

由上图可以看出Prewitt算子的边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。

6 Sobel 算子

6.1 基本原理

Sobel算子是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导。该算子用于计算图像明暗程度近似值,根据图像边缘旁边明暗程度把该区域内超过某个数的特定点记为边缘。Sobel算子在Prewitt算子的基础上增加了权重的概念,认为相邻点的距离远近对当前像素点的影响是不同的,距离越近的像素点对应当前像素的影响越大,从而实现图像锐化并突出边缘轮廓。

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息。因为Sobel算子结合了高斯平滑和微分求导(分化),因此结果会具有更多的抗噪性,当对精度要求不是很高时,Sobel算子是一种较为常用的边缘检测方法。

Sobel算子的边缘定位更准确,常用于噪声较多、灰度渐变的图像。其算法模板如下面的公式所示,其中 {​{d}_{x}} 表示水平方向,{​{d}_{y}} 表示垂直方向。

                                                                 {​{d}_{x}}=\left[ \begin{matrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \\ \end{matrix} \right]\begin{matrix} {} & {} & {} \\ {} & {} & {} \\ {} & {} & {} \\ \end{matrix}{​{d}_{y}}=\left[ \begin{matrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \\ \end{matrix} \right]

例如,下面给出Sobel算子模板,在像素点P5处 x 和 y 方向上的梯度大小 {g}_{x}} 和 {g}_{y}} 分别计算为:

                                                              {​{g}_{x}}=\frac{\partial f}{\partial x}=(\text{P7+2P8+P9)-}(\text{P1+2P2+P3)}

                                                              {​{g}_{y}}=\frac{\partial f}{\partial y}=(\text{P3+2P6+P9)-}(\text{P1+2P4+P7)}

 

6.2 代码示例

Sobel() 函数用法如下所示:

dst = Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])

其中,参数:

src 表示输入图像;

dst 表示输出的边缘图,其大小和通道数与输入图像相同;

ddepth 表示目标图像所需的深度,针对不同的输入图像,输出目标图像有不同的深度;

dx 表示 x 方向上的差分阶数,取值1或 0;

dy 表示 y 方向上的差分阶数,取值1或0;

ksize 表示Sobel算子的大小,其值必须是正数奇数

scale 表示缩放导数的比例常数,默认情况下没有伸缩系数;

delta 表示将结果存入目标图像之前,添加到结果中的可选增量值;

borderType 表示边框模式,更多详细信息查阅BorderTypes。

:在进行Sobel算子处理之后,还需要调用 convertScaleAbs() 函数计算绝对值,并将图像转换为8位图进行显示。其函数用法如下所示:

dst = convertScaleAbs(src[, dst[, alpha[, beta]]])

其中,参数:

src 表示原数组;

dst 表示输出数组,深度为8位;

alpha 表示比例因子;

beta 表示原数组元素按比例缩放后添加的值。

代码如下所示:

import cv2 as cv
import matplotlib.pyplot as plt# 读取图像
img = cv.imread('test.jpg', cv.COLOR_BGR2GRAY)
rgb_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)# 灰度化处理图像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# Sobel 算子
x = cv.Sobel(grayImage, cv.CV_16S, 1, 0)
y = cv.Sobel(grayImage, cv.CV_16S, 0, 1)# 转 uint8 ,图像融合
absX = cv.convertScaleAbs(x)
absY = cv.convertScaleAbs(y)
Sobel = cv.addWeighted(absX, 0.5, absY, 0.5, 0)# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']# 显示图形
titles = ['原始图像', 'Sobel算子']
images = [rgb_img, Sobel]for i in range(2):plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

7 Laplacian 算子

7.1 基本原理

拉普拉斯(Laplacian) 算子是 n 维欧几里德空间中的一个二阶微分算子,常用于图像增强领域和边缘提取。它通过灰度差分计算邻域内的像素。

算法基本流程

1)判断图像中心像素灰度值与它周围其他像素的灰度值,如果中心像素的灰度更高,则提升中心像素的灰度;反之降低中心像素的灰度,从而实现图像锐化操作;

2)在算法实现过程中,Laplacian算子通过对邻域中心像素的四方向或八方向求梯度,再将梯度相加起来判断中心像素灰度与邻域内其他像素灰度的关系;

3)最后通过梯度运算的结果对像素灰度进行调整。

Laplacian算子分为四邻域和八邻域,四邻域是对邻域中心像素的四个方向求梯度,八邻域是对八个方向求梯度。

其中,Laplacian算子四邻域模板如下所示:

                                                                              \text{H}=\left[ \begin{matrix} 0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0 \\ \end{matrix} \right]

Laplacian算子的八邻域模板如下所示:

                                                                              \text{H}=\left[ \begin{matrix} -1 & -1 & -1 \\ -1 & 8 & -1 \\ -1 & -1 & -1 \\ \end{matrix} \right]

通过Laplacian算子的模板可以发现:

1)当邻域内像素灰度相同时,模板的卷积运算结果为0;

2)当中心像素灰度高于邻域内其他像素的平均灰度时,模板的卷积运算结果为正数;

3)当中心像素的灰度低于邻域内其他像素的平均灰度时,模板的卷积为负数。对卷积运算的结果用适当的衰弱因子处理并加在原中心像素上,就可以实现图像的锐化处理。

                                                                              

 

7.2 代码示例

Python和OpenCV将Laplacian算子封装在 Laplacian() 函数中,其函数用法如下所示:

dst = Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])

其中,参数:

src 表示输入图像;

dst 表示输出的边缘图,其大小和通道数与输入图像相同;

ddepth 表示目标图像所需的深度;

ksize 表示用于计算二阶导数的滤波器的孔径大小,其值必须是正数和奇数,且默认值为1,更多详细信息查阅getDerivKernels ;

scale 表示计算拉普拉斯算子值的可选比例因子。默认值为1,更多详细信息查阅getDerivKernels;

delta 表示将结果存入目标图像之前,添加到结果中的可选增量值,默认值为0;

borderType 表示边框模式,更多详细信息查阅BorderTypes。

:Laplacian算子其实主要是利用Sobel算子的运算,通过加上Sobel算子运算出的图像 x 方向和 y 方向上的导数,得到输入图像的图像锐化结果。同时,在进行Laplacian算子处理之后,还需要调用 convertScaleAbs() 函数计算绝对值,并将图像转换为8位图进行显示。其函数用法如下:

dst = convertScaleAbs(src[, dst[, alpha[, beta]]])

其中,参数:

src 表示原数组;

dst 表示输出数组,深度为8位;

alpha 表示比例因子;

beta 表示原数组元素按比例缩放后添加的值。

当ksize=1时,Laplacian() 函数采用 3\times3 的孔径 (四邻域模板) 进行变换处理。下面的代码是采用 ksize=3 的Laplacian算子进行图像锐化处理。

代码如下所示:

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
img = cv2.imread('pig.jpg')
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 拉普拉斯算法
dst = cv2.Laplacian(grayImage, cv2.CV_16S, ksize=3)
Laplacian = cv2.convertScaleAbs(dst)# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']# # 显示图形
# titles = [u'原始图像', u'Laplacian算子']
# images = [lenna_img, Laplacian]
# for i in xrange(2):
#     plt.subplot(1, 2, i + 1), plt.imshow(images[i], 'gray')
#     plt.title(titles[i])
#     plt.xticks([]), plt.yticks([])
# plt.show()# 显示图形
plt.subplot(121),plt.imshow(img_RGB),plt.title('原始图像'), plt.axis('off') #坐标轴关闭
plt.subplot(122),plt.imshow(Laplacian, cmap=plt.cm.gray ),plt.title('Laplacian算子'), plt.axis('off')
plt.show()

 

 


http://chatgpt.dhexx.cn/article/gZD1TBDG.shtml

相关文章

opencv边缘检测 roberts算子

定义roberts两个算子 分别为135度 和45度。 [1,0, 0,-1] [0,1 -1,0] 这里展示在c实现的过程。先展示下效果图 分别是45度角 135度角和边缘效果图。 #include<opencv2/opencv.hpp> #include<opencv2/core/core.hpp> #include<opencv2/imgproc/imgproc.hpp> #…

基于QT+OpenCV边缘检测、面积检测

没什么好说的就是调库&#xff0c;直接看下效果图&#xff0c;&#xff0c;基于OPENC4.5.1&#xff0c;如需要请 原图&#xff1a; 对图形进行描边并进行标号 面积检测

【学习OpenCV4】OpenCV边缘检测算法总结

本文分享内容来自图书《学习OpenCV 4&#xff1a;基于Python的算法实战》&#xff0c;该书内容如下&#xff1a; 第1章 OpenCV快速入门&#xff1b; 第2章 图像读写模块imgcodecs&#xff1b; 第3章 核心库模块core&#xff1b; 第4章 图像处理模块imgproc&#xff08;一&…

Opencv边缘检测、轮廓发现、绘制轮廓

Opencv边缘检测、轮廓发现、绘制轮廓 提取图像轮廓的2个步骤 1、 findContours函数找轮廓&#xff0c; 2、 drawContours函数画轮廓 轮廓的查找——cv::findContours() 函数cv::findContour是从二值图像中来计算轮廓的&#xff0c;它可以使用cv::Canny()函数处理的图像&am…

基于Python的Opencv边缘检测

边缘检测实际上就是对图像进行系统的梯度计算&#xff0c;包含了图像的噪声处理&#xff0c;非极大值抑制&#xff0c;双阈值检测等一系列图像处理方式&#xff0c;通过这些方式处理图像后得到图像的轮廓。这些方式在之前的博客都已经提到过i了&#xff0c;而Opencv提供了一个非…

OpenCV 边缘检测

一. 实验内容 用OpenCV对图片进行边缘检测。 二. 实验代码 //边缘检测 class Task17 { public:void deal() {Mat src_img imread("img\\1.jpg");imshow("边缘检测[原图]", src_img);Mat gray_img;cvtColor(src_img, gray_img, COLOR_BGR2GRAY);Mat out…

java-opencv边缘检测

安装opencv 导入jar包需要dll jar包在opencv\build\java目录里&#xff0c;dll文件在opencv\build\java\64x目录里 边缘检测 package opencv;import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc…

python opencv边缘检测

通过Opencv进行边缘检测可以说是十分常见了&#xff0c;接下来让我们聊一聊如何通过python opencv一步一步实现边缘检测 重要函数讲解 图片读取函数: pic cv2.imread(file_path, flagNone) 参数&#xff1a; file_path:读取的图片的路径。这里要注意如果图像不能读取(由于…

python-opencv边缘检测

9.python-opencv边缘检测 第一章 python-opencv-图片导入和显示 第二章 python-opencv图像简单处理 第三章 python-opencv图像mask掩膜处理 第四章 python-opencv图像马赛克 第五章 python-opencv人脸马赛克 第六章 python-opencv人脸检测 第七章 python-opencv图像张贴 第八章…

opencv边缘检测

边缘检测的一般步骤 滤波 边缘检测的算法对噪声很敏感&#xff0c;所以采用滤波器来改善边缘检测器的性能。 增强 增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来。在具体编程实现时&#xff0c;可通过计算梯度…

14---OpenCV:图像检测之边缘检测

一、图像边缘 边缘(edge)是指图像局部强度变化最显著的部分。主要存在于目标与目标、目标与背景、区域与区域(包括不同色彩)之间&#xff0c;是图像分割、纹理特征和形状特征等图像分析的重要基础。图像强度的显著变化可分为&#xff1a; 阶跃变化函数&#xff0c;即图像强度在…

OpenCV学习11_边缘检测

本部分,我们将一起学习OpenCV中边缘检测的各种算子和滤波器-Canny算子、Sobel算子、Laplacian算子以及Scharr滤波器。 一、边缘检测步骤 在具体介绍之前,先来一起看看边缘检测的一般步骤。 1.【第一步】滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪…

opencv--边缘检测

opencv--边缘检测 1 边缘检测原理2 Sobel检测算子2.1 Sobel检测方法2.2 应用 3 Laplacian算子4. Canny边缘检测4.1 原理4.2应用 5 算子比较 1 边缘检测原理 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性…

【OpenCV--边缘检测】

目录 一、边缘检测概念 二、Sobel算子 1.描述&#xff1a; 2.方法&#xff1a; 3.Sobel算子的应用&#xff1a; 三、Laplacian算子 1.描述&#xff1a; 2.应用&#xff1a; 四、Canny边缘检测 1.原理&#xff1a; 2.应用&#xff1a; 一、边缘检测概念 1.边缘检测是图像处理和…

利用OpenCV进行边缘检测

简 介&#xff1a; 本文讨论了图像处理中重要的技术&#xff1a;边缘检测&#xff0c;重点介绍了两种方法&#xff08;Sobel边缘检测和Canny边缘检测&#xff09;。在展示OpenCV中的用法 同时也强调了为什么图像平滑是重要的预处理步骤。在Canny边缘检测中 也是使用的Sobel算子…

微信小程序实现轮播图根据图片大小自适应高度

上效果图 话不多说——————上代码 首先wxml <swiper class"con_img" style"height:{{swiperheight}}px" indicator-dots"true" autoplay"true" indicator-active-color"#f8e112" bindchange"changeheight&quo…

微信小程序-图片自适应

image组件 使用使用mode&#xff1a;widthFix&#xff0c;宽度固定&#xff0c;高度自适应 <image class"nav_img" mode"widthFix" src"{{img}}"></image> 注意&#xff0c;在初次进入页面时会有高度拉伸情况&#xff0c;使用样式…

小程序中图片宽度实现100%,高度自适应

在做轮播图时放了几个图片&#xff0c;但是显示一直怪怪的&#xff0c;宽度没有占满&#xff0c;右边总是留一大块空白&#xff0c;怪难看的&#xff0c;开始试了所有的mode属性都不行&#xff0c;至于mode属性起什么作用可以查一下小程序组件的API说明&#xff0c;主要用于控制…

微信小程序之swiper组件高度自适应

要求&#xff1a; &#xff08;顶部广告栏 &#xff09; 改变swiper组件的固定高度&#xff0c;使之随内部每张图片的高度做自适应 原理&#xff1a; 图片加载完之后&#xff0c;获取图片的原始宽高&#xff0c;根据宽高比&#xff0c;计算出适应后的宽高&#xff0c;如果是适…

微信小程序图片固定宽度,高度自适应处理方法及相关API介绍

微信小程序图片固定宽度&#xff0c;高度自适应处理方法及相关API介绍 1、背景 在我们写js代码时&#xff0c;控制图片固定宽度固定&#xff0c;使得高度自适应缩小&#xff0c;是非常简单的&#xff0c;但在微信小程序中不了解微信小程中组件image相关的属性是有些麻烦的&am…