参考:

OpenCV-Python教程(6、Sobel算子)

OpenCV-Python教程(7、Laplacian算子)

Python下opencv使用笔记(七)(图像梯度与边缘检测)


Sobel算子
原型
Sobel算子依然是一种过滤器,只是其是带有方向的。在OpenCV-Python中,使用Sobel的算子的函数原型如下:

dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
函数返回其处理结果。
前四个是必须的参数:

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

其后是可选的参数:

  • dst不用解释了;
  • ksize是Sobel算子的大小,必须为1、3、5、7。
  • scale是缩放导数的比例常数,默认情况下没有伸缩系数;
  • delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
  • borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。
import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread("D:\\software_my_programming\
\\relate_to_irisrecog\\CASIA-Iris-Lamp\\001\\L\\S2001L01.jpg",0)
#读取图像,0为灰度图像,1为彩色图像x = cv2.Sobel(img,cv2.CV_16S,1,0)
y = cv2.Sobel(img,cv2.CV_16S,0,1)absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)#转回uint8dst = cv2.addWeighted(absX,0.5,absY,0.5,0)plt.subplot(221),plt.imshow(img,'gray')
plt.subplot(222),plt.imshow(absX,'gray')
plt.subplot(223),plt.imshow(absY,'gray')
plt.subplot(224),plt.imshow(dst,'gray')
plt.show()

在Sobel函数的第二个参数这里使用了cv2.CV_16S。因为OpenCV文档中对Sobel算子的介绍中有这么一句:“in the case of 8-bit input images it will result in truncated derivatives”。即Sobel函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,即8位无符号数,所以Sobel建立的图像位数不够,会有截断。因此要使用16位有符号的数据类型,即cv2.CV_16S。

在经过处理后,别忘了用convertScaleAbs()函数将其转回原来的uint8形式。否则将无法显示图像,而只是一副灰色的窗口。convertScaleAbs()的原型为:

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

其中可选参数alpha是伸缩系数,beta是加到结果上的一个值。结果返回uint8类型的图片。
由于Sobel算子是在两个方向计算的,最后还需要用cv2.addWeighted(...)函数将其组合起来。其函数原型为:

dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])

其中alpha是第一幅图片中元素的权重,beta是第二个的权重,gamma是加到最后结果上的一个值。

laplacian算子

其核模板为:

在OpenCV-Python中,Laplace算子的函数原型如下:

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

前两个是必须的参数:

  • 第一个参数是需要处理的图像;
  • 第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;
  • 其后是可选的参数:
  • dst不用解释了;
  • ksize是算子的大小,必须为1、3、5、7。默认为1。
  • scale是缩放导数的比例常数,默认情况下没有伸缩系数;
  • delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
  • borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。

以上三种检测算子的一个代码:

import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread("D:\\software_my_programming\
\\relate_to_irisrecog\\CASIA-Iris-Lamp\\001\\L\\S2001L01.jpg",0)
#读取图像,0为灰度图像,1为彩色图像sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)#默认ksize=3
sobely = cv2.Sobel(img,cv2.CV_64F,0,1)
sobelxy = cv2.Sobel(img,cv2.CV_64F,1,1)
laplacian = cv2.Laplacian(img,cv2.CV_64F)#默认ksize=3
#人工生成一个高斯核,去和函数生成的比较
kernel = np.array([[0,-1,0],[-1,4,-1],[0,-1,0]],np.float32)#
img1 = np.float64(img)#转化为浮点型的
img_filter = cv2.filter2D(img1,-1,kernel)
sobelxy1 = cv2.Sobel(img1,-1,1,1)#目标图像深度不够plt.figure()
plt.subplot(221),plt.imshow(sobelx,'gray')
plt.subplot(222),plt.imshow(sobely,'gray')
plt.subplot(223),plt.imshow(sobelxy,'gray')
plt.subplot(224),plt.imshow(laplacian,'gray')plt.figure()
plt.imshow(img_filter,'gray')plt.show()

关于canny算子:

canny算子

不完善代码:

import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread("D:\\software_my_programming\
\\relate_to_irisrecog\\CASIA-Iris-Lamp\\001\\L\\S2001L01.jpg",0)
#读取图像,0为灰度图像,1为彩色图像edges = cv2.Canny(img,50,90)plt.subplot(121)
plt.imshow(img,'gray')
plt.subplot(122)
plt.imshow(edges,'gray')plt.show()

over!

边缘检测(opencv_python下)相关推荐

  1. OpenCV入门(四)——边缘检测

    目录 0x01 梯度算子 0x02 一阶微分算子 0x03 二阶微分算子 0x04 图像差分运算 0x05 非极大值抑制 0x06 基本边缘算子--Sobel 0x07 基本边缘算子--Laplace ...

  2. 数据库(DataBase)

    MySQL 简介 数据库 数据库:DataBase,简称 DB,存储和管理数据的仓库 数据库的优势: 可以持久化存储数据 方便存储和管理数据 使用了统一的方式操作数据库 SQL 数据库.数据表.数据的 ...

  3. 在CIELab颜色空间下使用八方向Sobel算子实现边缘检测

    参考河北师范大学硕士学位论文--基于八方向Sobel算子的边缘检测算法研究. 由于自己实现滤波器运算,计算速度很慢,以后有能力再进行改进. 算子定义如下: 算法思路: 1.将RGB图像转化为CIELa ...

  4. python + pyqt +opencv 有界面,对lable中的图片进行图像旋转,向右平移,向下平移,二值化,灰度,边缘检测

    对lable中的图片进行图像旋转,向右平移,向下平移,二值化,灰度,边缘检测 要求: 一个界面,具体界面内容自行设计但必须符合以下要求 多个操作按钮: 1.图像180°旋转 2.图像向右平移 3.图像 ...

  5. OpenCV环境下Laplace(拉普拉斯)和Roberts基本边缘检测算子的实现代码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 拉普拉斯算子是最简单的各向同性二阶微分算子,具有 ...

  6. matlab小波变换边缘检测,在matlab 下 实现 用小波变换对图像进行边缘检测 程序代码...

    代码如下: clear all; load wbarb; %小波变换边缘提取程序 I = ind2gray(X,map);%检索图转成灰度图 imshow(I); I1 = imadjust(I,st ...

  7. opencv_python答题卡自动判卷

    opencv_python答题卡自动判卷 设定答题卡模板 该图像为答题卡的答题区域,黑色边框是为了能够在各种环境中轻易的检测,左部分和上部分的黑色矩形,是为能够定位到答题选项的坐标而设置,同时题目数量 ...

  8. OpenCV 笔记(02)— 图像显示、保存、腐蚀、模糊、canny 边缘检测(imread、imshow、namedWindow、imwrite)

    OpenCV 提供两种用户界面选项: 基于原生用户界面的基本界面,适用于 Mac OS X 的 cocoa 或 carbon,以及适用于 Linux 或 Windows 用户界面的 GTK ,这些界面 ...

  9. Android OpenCV 边缘检测 Canny 的使用

    先看下实现的效果图 下面看下代码使用 Canny(Mat image, Mat edges, double threshold1, double threshold2, int apertureSiz ...

最新文章

  1. centos7部署DM8
  2. 【转】C# windows服务的创建与调试
  3. 利用流水线改进代码中的if处理流程
  4. win7一直提示格式化磁盘_win10磁盘分区操作步骤
  5. 【转】如何在忘记CentOS的root密码的情况下修改root密码。
  6. 封杀所有Bytespider蜘蛛,太频繁,太操蛋,不杀不行~~~
  7. java显式构造函数_C++中的显式构造函数
  8. ubuntu mysql emma_ubuntumysql客户端emma中文乱码问题解决_MySQL
  9. python spark进行大数据分析_第2天Python实战Spark大数据分析及调度-RDD编程
  10. 配置Java EE应用程序或“将Bien付诸实践”
  11. PHP 实现简单的 倒计时 时分秒
  12. OCR基于深度学习下的CNN字符识别
  13. mysql start tran_mysql事务,START TRANSACTION, COMMIT和ROLLBACK,SET AUTOCOMMIT语法
  14. C语言 取绝对值函数abs()使用及注意事项
  15. h5棋牌源码中MySQL中的锁(表锁、行锁)
  16. Jetson Nano安装ROS错误合集
  17. Linux部署Tomcat踩的坑以及解决方案【8080无法访问、日志显示XX端口被占用、修改默认端口、无法提供安全连接】
  18. pgpool-ii的安装与使用
  19. iOS培训机构该如何选择之浅析
  20. 评价指标 balanced accuracy

热门文章

  1. 计算机桌面曝光,win7电脑桌面壁纸曝光过高影响图标怎么办?亲测实用解决方法...
  2. ps2键盘测试软件,stm32_ps2键盘显示测试程序
  3. html中radio设置默认值
  4. 读H.265/HEVC编码笔记(一)
  5. Python Flask框架
  6. python中的分支结构——if语句
  7. PMP试题 | 每日一练,快速提分 8.6
  8. iOS即时通讯进阶 - CocoaAsyncSocket源码解析(Connect篇)
  9. win32创建窗口及其消息循环
  10. HTTP 404 错误 的具体意思