OpenCV自学笔记十三:图像梯度

目录

1、Sobel算子及函数使用

2、Scharr算子及函数使用

3、Lapiacian算子及函数使用


1、Sobel算子及函数使用

Sobel算子是一种常用于图像边缘检测的算法,它利用了图像中像素灰度值的变化来寻找边缘。在OpenCV中,可以使用函数cv2.Sobel()来实现Sobel算子的功能。

下面是一个示例代码,展示了如何使用Sobel算子进行图像边缘检测:

复制代码
import cv2

import numpy as np

# 读取图像

img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 对图像应用Sobel算子

sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)

sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)

# 将结果转换为无符号8位整型

sobelx = cv2.convertScaleAbs(sobelx)

sobely = cv2.convertScaleAbs(sobely)

# 合并x和y方向的梯度

gradient = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)

# 显示结果

cv2.imshow("Sobel", gradient)

cv2.waitKey(0)

cv2.destroyAllWindows()

在这个示例中,我们首先读取一张灰度图像,然后分别应用Sobel算子的x和y方向的核,通过`cv2.Sobel()`函数实现。第二个参数`cv2.CV_64F`指定了输出图像的深度。ksize参数指定了Sobel算子的大小,这里设为3表示使用3x3的核。

最后,我们将x和y方向的梯度图像合并起来,并通过`cv2.addWeighted()`函数进行加权融合。最后,将结果通过`cv2.imshow()`显示出来。

需要注意的是,Sobel算子对噪声比较敏感,所以在应用之前,可以先对图像进行平滑处理,例如使用高斯模糊 (`cv2.GaussianBlur()`) 函数。

2、Scharr算子及函数使用

Scharr算子是一种常用于图像边缘检测的算法,它与Sobel算子类似,但具有更好的性能。在OpenCV中,可以使用函数cv2.Scharr()来实现Scharr算子的功能。

下面是一个示例代码,展示了如何使用Scharr算子进行图像边缘检测:

复制代码
import cv2

import numpy as np

# 读取图像

img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 对图像应用Scharr算子

scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)

scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)

# 将结果转换为无符号8位整型

scharrx = cv2.convertScaleAbs(scharrx)

scharry = cv2.convertScaleAbs(scharry)

# 合并x和y方向的梯度

gradient = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)

# 显示结果

cv2.imshow("Scharr", gradient)

cv2.waitKey(0)

cv2.destroyAllWindows()

在这个示例中,我们首先读取一张灰度图像,然后分别应用Scharr算子的x和y方向的核,通过`cv2.Scharr()`函数实现。第二个参数`cv2.CV_64F`指定了输出图像的深度。

接着,将x和y方向的梯度图像通过`cv2.convertScaleAbs()`函数转换为无符号8位整型。

最后,将x和y方向的梯度图像合并起来,并通过`cv2.addWeighted()`函数进行加权融合。最后,将结果通过`cv2.imshow()`显示出来。

与Sobel算子类似,Scharr算子也对噪声比较敏感,所以在应用之前,可以先对图像进行平滑处理,例如使用高斯模糊 (`cv2.GaussianBlur()`) 函数。

3、Lapiacian算子及函数使用

Laplacian(拉普拉斯)算子是一种常用于图像边缘检测的算法,它可以提取图像中的二阶导数信息,从而寻找图像中的边缘。在OpenCV中,可以使用函数cv2.Laplacian()来实现Laplacian算子的功能。下面是一个示例代码,展示了如何使用Laplacian算子进行图像边缘检测:

复制代码
import cv2
import numpy as np

# 读取图像
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 对图像应用Laplacian算子
laplacian = cv2.Laplacian(img, cv2.CV_64F)

# 将结果转换为无符号8位整型
laplacian = cv2.convertScaleAbs(laplacian)

# 显示结果
cv2.imshow("Laplacian", laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,我们首先读取了一张灰度图像,然后应用Laplacian算子,通过`cv2.Laplacian()`函数实现。第二个参数`cv2.CV_64F`指定了输出图像的深度。

接下来,将Laplacian算子的结果通过`cv2.convertScaleAbs()`函数转换为无符号8位整型。

最后,使用`cv2.imshow()`显示结果。

需要注意的是,Laplacian算子对噪声比较敏感,因此在应用之前,可以先对图像进行平滑处理,例如使用高斯模糊(`cv2.GaussianBlur()`)函数。

相关推荐
推送者37 分钟前
用宠物照片制作桌宠:从AI拆帧到九点标定的本地化实现笔记
笔记·宠物·用宠物照片制作桌宠
一条破秋裤1 小时前
16_TIM编码器接口测速
笔记·stm32·学习
tju新生代魔迷1 小时前
Verilog HDL 学习笔记(十)| 第10章 时序和延迟
笔记·学习·fpga开发
Evand J2 小时前
【MATLAB例程,图像滤波5】 反谐波均值滑动窗口滤波(CHMF)图像降噪与质量评价,附代码下载链接
图像处理·算法·计算机视觉·matlab·均值算法·滑动窗口滤波·均值滑动
血小板要健康3 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
浔溺3 小时前
al+大数据每日学习笔记31
大数据·笔记·学习
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 9 章 跨域问题 阅读笔记 27
spring boot·笔记·okhttp
山岚的运维笔记3 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
动物园猫3 小时前
道路设施目标检测数据集:4类别、5,000张图像 | 目标检测
人工智能·目标检测·计算机视觉
噜~噜~噜~4 小时前
操作系统笔记-2.3.6 管程
笔记·操作系统