目标

  • 认识图像梯度、边界
  • 学习函数cv2.Sobel(),cv2.Schar(),cv2.Laplacian()

原理

图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。OpenCV提供三种类型的梯度滤波器或高通滤波器,Sobel,Scharr和Laplacian.

Sobel 和 Scharr 算子

Sobel算子是结合了高斯平滑与微分运算的结合方法,所以它的抗噪声能力很强,其是普通一阶差分,是基于寻找梯度强度。每一个算子分别对应这x和y这两个方向的模板,故在代码中要分别在两个方向上处理,最后用cv2.addWeighted(...)函数将其组合起来。

Sobel算子

Sobel函数原型如下:

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

前四个是必须的参数:

  • 第一个参数是需要处理的图像;
  • 第二个参数是图像的深度(数据类型),-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;
  • dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2;

其后是可选的参数:

  • ksize是Sobel算子的大小,必须为1、3、5、7。如果ksize=-1,那么一个3*3的scharr滤波器会被使用;
  • delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
  • borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT;

Laplacian算子

拉普拉斯算子是常用的边缘检测算子,它是各向同性的二阶导数。

计算公式卷积核

代码实践

Sobel算子:

# coding=utf-8
import cv2
import numpy as npimg = cv2.imread("/home/wl/1.jpg", 0)x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
y = cv2.Sobel(img, cv2.CV_16S, 0, 1)absX = cv2.convertScaleAbs(x)  # 转回uint8
absY = cv2.convertScaleAbs(y)dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)while(1):cv2.imshow("absX", absX)cv2.imshow("absY", absY)cv2.imshow("Result", dst)k = cv2.waitKey(1) & 0XFFif k==ord('q'):break;
cv2.destroyAllWindows()

原图:

效果图:

Laplacian算子:

# coding=utf-8
import cv2
import numpy as npimg = cv2.imread("/home/wl/1.jpg", 0)
laplacian=cv2.Laplacian(img,cv2.CV_64F)
dst = cv2.convertScaleAbs(laplacian) #转回uint8
while(1):cv2.imshow("Result",dst)k = cv2.waitKey(1) & 0XFFif k==ord('q'):break;
cv2.destroyAllWindows()

效果图:

注意点

代码看了的话,会发现我们的sobel函数的第二个参数(数据类型)会换成cv2.CV_16S或cv2.CV_64F,最后再变回uint8。这是因为从黑到白的边界点的导数是正数,而从白到黑是负数,如果还是使用uint8,那么所有的负数都会变为0,即被截断。

转载于:https://www.cnblogs.com/longwhite/p/10397752.html

Opencv笔记(十三)——图像的梯度相关推荐

  1. OpenCV笔记之 图像有效区域复制 image.copyTo()

    **openCV image.copyTo()** 1,实现目的 为了实现图像进行等比例的扩张,其中牵涉到一些前提环节.一下对牵涉到的几个关键点一一进行记录. 1,OpenCV中Mat类的图像如何设置 ...

  2. 【OpenCV笔记】图像预处理

    2019独角兽企业重金招聘Python工程师标准>>> http://m.blog.csdn.net/article/details?id=38061171 转载于:https:// ...

  3. OpenCV笔记-图像预处理1

    OpenCV笔记 一. 图像预处理 1. 图像显示与存储 1.1 颜色空间 颜色空间(RGB) 加法混色 三通道:RGB 一个像素的颜色值:(b,g,r) 取值范围:[0,255] or [0.0,1 ...

  4. OpenCV+python:图像梯度

    1,图像梯度的概念 梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(无论是横向的.纵向的.斜方向的等等),所需要的是一个核模板.模板的不同结果也不同.所以能够看到,全部的这些个算子函数,归 ...

  5. opencv笔记(3):图像镜像

    生活就像大海,我就像一条咸鱼,在浩瀚的海洋中边浪边学,这是opencv笔记系列中的「图像镜像」.更多笔记可关注「浪学」公众哦 ~ 世间万图,皆有镜像.这一篇文章以很咸鱼的方式把它们记录下来. 首先,是 ...

  6. C++下opencv学习笔记(一)(图像的简单读取丶显示与存储)

    C++下opencv学习笔记(一)(图像的简单读取丶显示与存储) 前言 学习C++ OpenCV,第一需要具备面向对象语言的基础,第二要对图像处理机器学习有基础了解,容易入门.觉得自己基础已经有了可以 ...

  7. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

  8. OpenCV学习笔记(九)——图像轮廓(下)

    <OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...

  9. Opencv学习笔记(八) -- 图像色彩空间转换

    1.常见图像色彩空间 RGB RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道 ...

  10. 【OpenCV】32 图像梯度–更多梯度算子(rober算子、prewitt算子)

    32 图像梯度–更多梯度算子(rober算子.prewitt算子) 代码 import cv2 as cv import numpy as npsrc = cv.imread("../ima ...

最新文章

  1. ACL最佳论文提出最新NLP模型测试方法,最佳论文提名也不可小觑
  2. 渗透测试之地基服务篇:服务攻防之中间件JBoss
  3. ] ssh登录慢的原因
  4. iphone闪退修复工具_iOS 13.3越yu工具再更新,修复若干问题(附自签教程)
  5. 外设驱动库开发笔记8:GPIO模拟I2C驱动
  6. android指纹java_Android
  7. Gstreamer之gst_omx_video_enc_set_format(二十七)
  8. UE4路径跟随插件使用文档
  9. 2014 抢票工具 纯java
  10. Python实用案例,Python脚本实现快速卡通化人物头像,让我想起了QQ秀时光!
  11. 时间序列分析_餐厅销量预测_2022_5_14
  12. 与人斗其乐无穷,教你回答职场送命题!
  13. 视通科技知识产权保护中心审理庭解决方案
  14. Matlab如何安装并使用Robotics 机器人工具箱
  15. flutter创建/导入区块链钱包,获取余额
  16. 一文读懂什么是软件供应链安全
  17. c运行库之 c语言标准库、glibc、 gcc库
  18. 百度 腾讯 阿里 小米 笔试题目宝典
  19. rebar3使用介绍(七)测试
  20. 台服DNF腾讯云搭建流程

热门文章

  1. Docker自动构建开发测试平台
  2. 加sudo后执行.sh报错command not found
  3. C/C++面试题—机器人的运动范围【回溯法应用】
  4. Linux系统编程:使用mutex互斥锁和条件变量实现多个生成者和消费者模型
  5. 一款回到顶部的 jQuery 插件,支持 Div 中的滚动条回到顶部
  6. Vue.js入门系列教程(二)
  7. 沉淀再出发:PHP的中级内容
  8. Python_爬虫_案例汇总:
  9. C++11范围for循环
  10. 大数据基础知识问答----hadoop篇