文中代码使用出处:

https://blog.csdn.net/Eastmount/article/details/89056240

记录一下代码详解:

"""
原理:首先对图像做高斯滤波,然后再求其拉普拉斯(Laplacian)二阶导数。
即图像与 Laplacian of the Gaussian function 进行滤波运算。
最后,通过检测滤波结果的零交叉(Zero crossings)可以获得图像或物体的边缘。
因而,也被简称为Laplacian-of-Gaussian (LoG)算子。
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt    # Python的2D绘图库# 读取图像
"""
RGB 与 BGR:R代表红,red ;  G代表绿,green; B代表蓝,blue。RGB模式就是,色彩数据模式,R在高位,G在中间,B在低位。BGR正好相反。
使用函数cv2.imread(filepath,flags)读入一副图片
filepath:要读入图片的完整路径
flags:读入图片的标志
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
cv2.IMREAD_GRAYSCALE:读入灰度图片
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道
import numpy as npimport cv2img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
"""
img = cv2.imread('KIKI.jpg')    # cv2.imread()接口读图像,读进来直接是BGR 格式数据格式在 0~255,通道格式为(H,W,C)
KIKI_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # cv2.cvtColor() 颜色空间转换函数。 cv2.COLOR_BGR2RGB 将BGR转为RGB颜色空间# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)   # cv2.cvtColor() 颜色空间转换函数。 cv2.COLOR_BGR2GRAY 将BGR转为灰色颜色空间# 先通过高斯滤波降噪
"""
C++: void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT )
InputArray src: 输入图像,可以是Mat类型,图像深度为CV_8U、CV_16U、CV_16S、CV_32F、CV_64F。 OutputArray dst: 输出图像,与输入图像有相同的类型和尺寸。
double sigmaX: 高斯核函数在X方向上的标准偏差
double sigmaY: 高斯核函数在Y方向上的标准偏差,如果sigmaY是0,则函数会自动将sigmaY的值设置为与sigmaX相同的值,如果sigmaX和sigmaY都是0,这两个值将由ksize.width和ksize.height计算而来。具体可以参考getGaussianKernel()函数查看具体细节。建议将size、sigmaX和sigmaY都指定出来。
int borderType=BORDER_DEFAULT: 推断图像外部像素的某种便捷模式,有默认值BORDER_DEFAULT,如果没有特殊需要不用更改,具体可以参考borderInterpolate()函数。Size ksize: 高斯内核大小,这个尺寸与前面两个滤波kernel尺寸不同,
ksize.width和ksize.height可以不相同但是这两个值必须为正奇数,如果这两个值为0,他们的值将由sigma计算。
"""
gaussian = cv2.GaussianBlur(grayImage, (3,3), 0)# 再通过拉普拉斯算子做边缘检测
"""
cv2.CV_16S:depth参数,输出图像的深度(数据类型),可以使用-1,与原图像保持一致 .目标图像的深度必须大于等于原图像的深度;Laplacian函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,即8位无符号数,所以Laplacian建立的图像位数不够,会有截断。因此要使用16位有符号的数据类型,即cv2.CV_16S。ksize是算子的大小,必须为奇数。默认为1。
"""
"""
convertScaleAbs():在经过处理后,要用convertScaleAbs()函数将其转回原来的uint8形式。否则将无法显示图像,而只是一副灰色的窗口。
"""
dst = cv2.Laplacian(gaussian, cv2.CV_16S, ksize=3)
LOG = cv2.convertScaleAbs(dst)# 用来正常显示中文标签
"""
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
"""
plt.rcParams['font.sans-serif'] = ['SimHei']# 显示图形
"""
u'': 保持源码文件的utf-8不变.这个u表示将后面跟的字符串以unicode格式存储。
python会根据代码第一行标称的utf-8编码识别代码中的汉字’哈’,然后转换成unicode对象
"""
titles = [u'原始图像', u'LOG算子']   #列表
images = [KIKI_img, LOG]
"""
plt.subplot: 其中各个参数也可以用逗号,分隔开。第一个参数代表子图的行数;
第二个参数代表该行图像的列数; 第三个参数代表每行的第几个图像。plt.xticks([-1,0,1],['-1','0','1']) : 第一个:对应X轴上的值,第二个:显示的文字
"""
for i in range(2):plt.subplot(1, 2, i + 1), plt.imshow(images[i],'gray')  # camp参数  gray : 显示灰度图(如果没有则是热量图)plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

结果如下:

[Python图像处理] Laplacian-of-Gaussian(LOG)算子相关推荐

  1. c++ log函数_高斯拉普拉斯算子(Laplacian of Gaussian, LoG)

    一.简要描述: 拉普拉斯算子是图像二阶空间导数的二维各向同性测度.拉普拉斯算子可以突出图像中强度发生快速变化的区域,因此常用在边缘检测任务当中.在进行Laplacian操作之前通常需要先用高斯平滑滤波 ...

  2. 用拉普拉斯变换求零状态响应_高斯拉普拉斯算子(Laplacian of Gaussian, LoG)

    一.简要描述: 拉普拉斯算子是图像二阶空间导数的二维各向同性测度.拉普拉斯算子可以突出图像中强度发生快速变化的区域,因此常用在边缘检测任务当中.在进行Laplacian操作之前通常需要先用高斯平滑滤波 ...

  3. Laplacian of Gaussian (LOG) 高斯拉普拉斯算子

    Laplacian(拉普拉斯)是对于一张图像的二阶空间导数上各向同性的测量.一张图像的Laplacian会显示出intensity(亮度) 剧烈变化的区域,所以经常用作边缘检测. 一幅图像的拉普拉斯变 ...

  4. log算子dog算子

    背景引言 在博文差分近似图像导数算子之Laplace算子中,我们提到Laplace算子对通过图像进行操作实现边缘检测的时,对离散点和噪声比较敏感.于是,首先对图像进行高斯暖卷积滤波进行降噪处理,再采用 ...

  5. [Python图像处理] 四十二.Python图像锐化及边缘检测万字详解(Roberts、Prewitt、Sobel、Laplacian、Canny、LOG)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  6. [Python图像处理] 十八.图像锐化与边缘检测之Scharr算子、Canny算子和LOG算子

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  7. python 图像处理 拉普拉斯算子的实现和改进-LoG和DoG算子

    拉普拉斯算子 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性. 我们经常把它作为边缘检测之一,也是工程数学中常用的一种积分变换,也可以用于图像增强.角点检测等等. 这里只给出它的代码,原理可 ...

  8. 【OpenCV图像处理入门学习教程四】基于LoG算子的图像边缘检测

    OpenCV图像处理入门学习教程系列,上一篇第三篇:基于SIFT特征和SURF特征的微旋转图像拼接与融合生成全景图像的比较 LoG边缘检测算子 LoG边缘检测算子是David Courtnay Mar ...

  9. 万字长文告诉新手如何学习Python图像处理(上篇完结 四十四) | 「Python」有奖征文

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

最新文章

  1. Java 14 Hotspot 虚拟机垃圾回收调优指南!
  2. linux查看flash插件更新,Linux用户:快更新Flash Player修复漏洞
  3. 让设计模式在开始就拯救你的项目
  4. Python接口测试-模块引用与映射
  5. AspNetCore 启动地址配置详解
  6. [Java基础]Stream流综合练习
  7. latex ht在下一页_告诉我们在下一本出色的领导力著作中要包括的内容
  8. Python-字典遍历
  9. 网页中常用加载页面的实现原理
  10. AirPlay屏幕镜像技术-概述-P1
  11. 华硕主板装系统蓝屏_装xp系统蓝屏,电脑安装xp系统蓝屏怎么办
  12. c语言怎么字体加粗,html 字体加粗
  13. 有道云笔记 markdown html,你不可不知的有道云笔记Markdown指南【进阶版】
  14. 基于SSM实现的艺术品鉴定管理系统+App
  15. WIFI智能电源插座是怎么连上路由器的?
  16. 【Python】Pandas实用技能,数据筛选query函数详细介绍
  17. 8种CSS3按钮动画特效【附源码】
  18. 抗混叠滤波的Matlab解释
  19. 5.Flink对接Kafka入门
  20. 信息在计算机中的表示(一)

热门文章

  1. dubbo 请求调用过程分析
  2. linux下添加简单的开机自启动脚本
  3. git push --set-upstream origin master问题解决方法(引用jqwei2的博客)
  4. Word怎么转换成PDF免费?分享适合你的Word转PDF方法
  5. 怎样用html实现微信九宫格,微信小程序使用canvas实现,图片分割为九宫格,点击图片保存...
  6. 安装Mathtype 7 在 word2016中,解决Word闪退问题
  7. 数字集成电路设计简介及设计方法
  8. 详细讲解ExpandableListView显示和查询仿QQ分组列表用户信息
  9. spring循环引用异常:in its raw version as part of a circular reference, but has eventually been wrapped
  10. mysql er 图_数据库ER图基础概念整理