Python 计算机视觉编程进阶之OpenCV 图像锐化及边缘检测

目录
  • 前言
    • (1)图像锐化
    • (2)图像边缘检测
      • a. 图像边缘
      • b. 边缘检测
  • 1. 一阶微分算算子、二阶微分算子
  • 2. 读取图像信息
  • 3. Sobel 算子
  • 4. Laplacian 算子
  • 5. Scharr 算子
  • 6. Canny 算子
  • 7. 总结
  • 8. 参考论文

参考的一些文章以及论文我都会给大家分享出来 —— 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了。大家一起学习,一起进步!加油!!

前言

(1)图像锐化

前一篇文章中我们进行了对图像的噪声的滤除操作,使用的手段是进行图像平滑,我们提到图像平滑是将图像中的高频部分进行滤除,然而图像中的高频部分则是主要决定了图像的一些细节部分,因此滤除高频部分就代表着图像会变得模糊,这对与图像的处理来说不太友好,所以我们要适当对平滑后的图像进行锐化操作,使得图像的一些边缘部分变得更加清晰,便于我们观察图像的信息。

(2)图像边缘检测

a. 图像边缘

图像的大部分信息都存在于图像的边缘中 ,主要表现为图像局部特征的不连续性,即图像中灰度变化比较剧烈的地方。因此 ,我们把图像的边缘定义为图像中灰度发生急剧变化的区域边界。根据灰度变化的剧烈程度, 通常将边缘划分为阶跃状和屋顶状两种类型。阶跃边缘两边的灰度值变化明显,而屋顶边缘位于灰度值增加与减少的交界处。

b. 边缘检测

边缘检测的目的是去发现图像中关于形状和反射或透射比的信息, 是图像处理、图像分析、模式识别、计算机视觉以及人类视觉的基本步骤之一。 其结果的正确性和可靠性将直接影响到机器视觉系统对客观世界的理解。

本篇文章主要进行 Python 实际操作,不进行一些概念的解释和数学推导,以后有时间专门出一篇特别篇进行概念解释。

1. 一阶微分算算子、二阶微分算子

前面我们提到,图像边缘分为阶跃状和屋顶状两种类型,其中阶跃边缘两边的灰度值变化明显,而屋顶边缘位于灰度值增加与减少的交界处。

那么, 对阶跃边缘和屋顶边缘分别求取一阶、二阶导数就可以表示边缘点的变化。即对于一个阶跃边缘点,其灰度变化曲线的一阶导数在该点达到极大值, 二阶导数在该点与零交叉(一阶导数与二阶导数的意义);对于一个屋顶边缘点,其灰度变化曲线的一阶导数在该点与零交叉(因为该点为一个局部最大值点);二阶导数在该点达到极大值。

2. 读取图像信息

在我们这个计算机视觉的专栏文章里第一步永远是经典的读取图像信息,而且是美女图像信息:

"""
Author:XiaoMa
date:2021/10/29
"""
import cv2
import matplotlib.pyplot as plt
#读取图像信息
img0 = cv2.imread("E:\From Zhihu\For the desk\cvten2.jpg")
img1 = cv2.resize(img0, dsize = None, fx = 0.5, fy = 0.5)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
cv2.imwrite("E:\From Zhihu\For the desk\cvtenGray.jpg", img2)   #保存灰度图
h, w = img1.shape[:2]
print(h, w)
cv2.namedWindow("W0")
cv2.imshow("W0", img1)
cv2.waitKey(delay = 0)

得到图像信息如下:

395 702

我们接下来要做的就是对图像进行边缘检测

3. Sobel 算子

#Sobel 算子
img3 = cv2.Sobel (img2, cv2.CV_64F, 0, 1, ksize=5)
cv2.namedWindow("W3")
cv2.imshow("W3", img3)
cv2.waitKey(delay = 0)

4. Laplacian 算子

#Laplacian 算子
img7 = cv2.Laplacian(img2, cv2.CV_64F)
cv2.namedWindow("W7")
cv2.imshow("W7", img7)
cv2.waitKey(delay = 0)

5. Scharr 算子

#Scharr 算子
img9 = cv2.Scharr(img2, cv2.CV_64F, 0, 1)
cv2.namedWindow("W9")
cv2.imshow("W9", img9)
cv2.waitKey(delay = 0)

6. Canny 算子

#canny 算子
img4 = cv2.Canny(img2, 100, 200)
cv2.namedWindow("W4")
cv2.imshow("W4", img4)
cv2.waitKey(delay = 0)

7. 总结

这天时间比较紧,这篇博文在介绍图像的锐化以及边缘检测时没有涉及到过多的理论知识以及概念公式等,后面闲下来会加以补充或者专门写一篇总结理论知识的文章,希望能帮到大家。参考论文按照惯例贴在下面。

8. 参考论文

到此这篇关于Python 计算机视觉编程进阶之OpenCV 图像锐化及边缘检测的文章就介绍到这了,更多相关Python OpenCV 图像锐化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何利用Python 进行边缘检测

    为何检测边缘? 我们首先应该了解的问题是:"为什么要费尽心思去做边缘检测?"除了它的效果很酷外,为什么边缘检测还是一种实用的技术?为了更好地解答这个问题,请仔细思考并对比下面的风车图片和它的"仅含边缘的图": 可以看到,左边的原始图像有着各种各样的色彩.阴影,而右边的"仅含边缘的图"是黑白的.如果有人问,哪一张图片需要更多的存储空间,你肯定会告诉他原始图像会占用更多空间.这就是边缘检测的意义:通过对图片进行边缘检测,丢弃大多数的细节,从而得到&q

  • Python OpenCV实现边缘检测

    本文实例为大家分享了Python OpenCV实现边缘检测的具体代码,供大家参考,具体内容如下 1. Sobel 算子检测 Sobel 算子是高斯平滑和微分运算的组合,抗噪能力很强,用途也很多,尤其是效率要求高但对细纹理不是很在意的时候. 对于不连续的函数,有: 假设要处理的图像为I,在两个方向求导. 水平变化:用奇数大小的模板对图像I卷积,结果为Gx.例如,当模板大小为3时,Gx为: 垂直变化:用奇数大小的模板对图像I卷积,结果为Gy.例如,当模板大小为3时,Gy为: 在图像的每个点,结合以上

  • python opencv实现图像边缘检测

    本文利用python opencv进行图像的边缘检测,一般要经过如下几个步骤: 1.去噪 如cv2.GaussianBlur()等函数: 2.计算图像梯度 图像梯度表达的是各个像素点之间,像素值大小的变化幅度大小,变化较大,则可以认为是出于边缘位置,最多可简化为如下形式: 3.非极大值抑制 在获得梯度的方向和大小之后,应该对整幅图像做一个扫描,去除那些非边界上的点.对每一个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的.如下图所示: 4.滞后阈值 现在要确定那些边界才是真正的

  • Python使用Opencv实现边缘检测以及轮廓检测的实现

    边缘检测 Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞后阈值化. Canny边缘检测器算法基本步骤: 平滑图像:通过使用合适的模糊半径执行高斯模糊来减少图像内的噪声. 计算图像的梯度:这里计算图像的梯度,并将梯度分类为垂直.水平和斜对角.这一步的输出用于在下一步中计算真正的边缘. 非最大值抑制:利用上一步计算出来的梯度方向,检测某一像素在梯度的正方向和负方向上是否是局部最大值,如果是,则抑制该像素(像素不属于

  • Python实现Opencv cv2.Canny()边缘检测

    目录 1. 效果图 2. 源码 补充:OpenCV-Python 中 Canny() 参数 这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测: Canny边缘检测是一种流行的边缘检测算法.它是由约翰F开发的,是一个多阶段的算法: Canny边缘检测大致包含4个步骤: 降噪(使用高斯滤波去除高频噪声): 计算边缘梯度和方向(SobelX.SobleY核在水平方向和垂直方向对平滑后的图像进行滤波,找到每个像素的边缘梯度和方向): 非最大抑制(在得到梯度大小和方向后,对

  • Python 计算机视觉编程进阶之OpenCV 图像锐化及边缘检测

    目录 前言 (1)图像锐化 (2)图像边缘检测 a. 图像边缘 b. 边缘检测 1. 一阶微分算算子.二阶微分算子 2. 读取图像信息 3. Sobel 算子 4. Laplacian 算子 5. Scharr 算子 6. Canny 算子 7. 总结 8. 参考论文 参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起进步!加油!! 前言 (1)图

  • Python 计算机视觉编程进阶之OpenCV 进行霍夫变换

    目录 前言 (1)读取图像信息 (2)霍夫变换的目的及应用 1. 霍夫变换 2. 霍夫线变换 (1)基本概念 (2)代码实现 3. 霍夫圆变换 (1)基本概念 (2)代码实现 4. 将所有图像绘制到一张图中 5. 总体代码 结束语 参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起进步!加油!! 前言 (1)读取图像信息 经典操作,不必多说: "&

  • Python 计算机视觉编程进阶之图像特效处理篇

    前言 图像特效处理一般是对图像的像素点的通道.灰度值值等进行操作,达到想要的结果,下面将会给大家一一呈现一些简单特效的原理以及代码实现,希望能够对大家有一定的帮助. 话不多说,先是本系列文章的经典操作之读取图像信息: """ Author:XiaoMa date:2021/11/16 """ import cv2 import numpy as np import math import matplotlib.pyplot as plt img0

  • Python计算机视觉SIFT尺度不变的图像特征变换

    目录 图像特征-SIFT尺度不变特征变换 1.1图像尺度空间 1.2多分辨率金字塔 1.3高斯差分金字塔 1.4DoG空间极值检测 1.5关键点的精确定位 1.6消除边界响应 1.7特征点的主方向 1.8生成特征描述 OpenCV SIFT函数 图像特征-SIFT尺度不变特征变换 1.1图像尺度空间 在一定的范围内,无论物体是大还是小,人眼都可以分辨出来,然后计算机要具有相同的能力却很难,所以要让机器能够对物体在不同尺度下有一个统一的认知,就需要考虑图像在不同尺度下都存在的特点. 尺度空间的获取

  • Python图像锐化与边缘检测之Sobel与Laplacian算子详解

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

  • Python图像锐化与边缘检测之Scharr,Canny,LOG算子详解

    目录 一.Scharr算子 二.Cann算子 三.LOG算子 四.总结 一.Scharr算子 由于Sobel算子在计算相对较小的核的时候,其近似计算导数的精度比较低,比如一个3×3的Sobel算子,当梯度角度接近水平或垂直方向时,其不精确性就越发明显.Scharr算子同Sobel算子的速度一样快,但是准确率更高,尤其是计算较小核的情景,所以利用3×3滤波器实现图像边缘提取更推荐使用Scharr算子. Scharr算子又称为Scharr滤波器,也是计算x或y方向上的图像差分,在OpenCV中主要是

  • python计算机视觉opencv图像金字塔轮廓及模板匹配

    目录 1.图像金字塔 ①高斯金字塔 ②拉普拉斯金字塔 2.图像轮廓 ①寻找轮廓 ②轮廓特征 ③轮廓绘制 3.模板匹配 ①模板匹配 ②匹配框线绘制 ③多对象匹配 4.直方图统计 ①直方图绘制 ②直方图统计 ③直方图的mask操作 ④直方图均衡化 5.傅里叶变换 1.图像金字塔 ①高斯金字塔 向下采样,数据会越来越少,减少的方式是:将偶数行和列删除 向上采样,数据会越来越多,将图像在每个方向上扩大为原来的两倍,新增的行和列用0来填充.使用先前同样的内核与放大后的图像卷积,获得近似值. 上采样之后,图

  • python计算机视觉OpenCV库实现实时摄像头人脸检测示例

    目录 设备准备: 实现过程 调用模型库文件 打开摄像头 人脸检测 设置退出机制 程序运行 全部代码 OpenCV 是一个C++库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块.在Python中常使用OpenCV库实现图像处理. 本文将介绍如何在Python3中使用OpenCV实现实时摄像头人脸检测: 设备准备: USB摄像头 接入PC电脑USB口,并调试正常打开视频.如果电脑内置了电脑摄像头,测试一下摄像头能否正常使用. 下载特征分类模型: XM

  • python计算机视觉opencv卡号识别示例详解

    目录 一.模板预处理 1.将模板设置为二值图 2.检测模板的轮廓 3.对模板轮廓排序,并将数字和轮廓一一对应,以字典存储 4.备注 二.图片预处理 1.初始化卷积核 2.图片预处理第一部分 3.图像预处理第二部分 三.轮廓处理 1.大轮廓过滤 2.小轮廓分割 模板图片如下: 需识别的图片如下: 一.模板预处理 1.将模板设置为二值图 2.检测模板的轮廓 3.对模板轮廓排序,并将数字和轮廓一一对应,以字典存储 排序的函数如下: 排序并存储: 4.备注 ①每一个数字对应的是二值图截出来的那个数字图的

  • python计算机视觉opencv矩形轮廓顶点位置确定

    目录 一.问题的引入 二.问题的解决方法 方法一: 方法二 三.一些实现代码 一.问题的引入 opencv在图像处理方面有着非常强大的功能,当我们需要使用opencv进行一些图像的矫正工作时,我们通常需要找到原图的一些关键点,然后计算变换后的图像坐标,最后通过仿射变换或者透视变换获得自己想要的矫正图像,比如将一张拍歪了的纸进行矫正,我们的首要任务就是找到原图的一些关键点,通常的做法就是找纸张的4个顶点. 二.问题的解决方法 第一步我们肯定要找到纸张相应的矩形轮廓,这里可以二值化再找,也可以使用一

随机推荐