1.cv2.Sobel(src, ddepth, dx, dy, ksize)  进行sobel算子计算

参数说明:src表示当前图片,ddepth表示图片深度,这里使用cv2.CV_64F使得结果可以是负值, dx表示x轴方向,dy表示y轴方向, ksize表示移动方框的大小

2.cv2.convertScalerAbs(src)  将像素点进行绝对值计算

参数说明: src表示当前图片

sobel算子:分为x轴方向和y轴方向上的,x轴方向上的算子如图中的Gx,将sober算子在图中进行平移,当前位置的像素值等于sobel算子与(当前位置与周边位置8个点)进行对应位置相乘并相加操作,作为当前位置的像素点,y轴方向的算子如Gy, 对于x轴方向上,即左右两边的比较,

计算方程为:x轴: p3 - p1 + 2 * p6 - 2 * p4 + p9 - p7, 右边的像素值减去左边的像素值

代码:

第一步:载入原始图片

第二步:使用cv2.Sobel(src, cv2.CV_64F, 1, 0, ksize=3)  对x轴方向进行sobel算子相乘操作

第三步:由于会出现负值的情况,因此使用cv2.convertScalerAbs() 转换为绝对值的形式

第四步:计算y轴方向上的sobel算子

第五步:使用cv2.addWeighted 将x轴方向的sobel算子的结果和y轴方向上的sobel算子的结果结合

第六步:使用cv2.Sobel(src, cv2.CV_64F, 1, 1, ksize=3) 直接获得x轴和y轴方向上的sobel算子结合

第七步:对这两个步骤获得的sobel算子作图

import cv2
import numpy as np # 第一步:加载图片
img = cv2.imread('pie.png')
cv2.imshow('original', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 第二步:对x轴方向上进行sobel算子相乘操作
x_sobel = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
cv2.imshow('x_sobel', x_sobel)
cv2.waitKey(0)
cv2.destroyAllWindows()

画图时的负值,使用0来进行表示,因此右侧是黑色的

# 第三步:因为右侧像素减去左边像素,存在负值的情况,因此使用cv2.convertScaleAbs取绝对值操作
x_sobel = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
x_sobel = cv2.convertScaleAbs(x_sobel)
cv2.imshow('x_sobel', x_sobel)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 第四步:计算y轴的sobel算子
y_sobel = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
y_sobel = cv2.convertScaleAbs(y_sobel)
cv2.imshow('y_sobel', y_sobel)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 第五步:并使用cv2.addweighted进行合并
xy_sobel = cv2.addWeighted(x_sobel, 0.5, y_sobel, 0.5, 0) # 第六步: 直接使用cv2.sobel 进行计算
xy_sobel_direct = cv2.Sobel(img, cv2.CV_64F, 1, 1, ksize=3) # 第七步:画图比较分步合并和一步到位的结果差异
cv2.imshow('imgs', np.hstack((xy_sobel, xy_sobel_direct)))
cv2.waitKey(0)
cv2.destroyAllWindows()

从图中我们可以看出x和y轴各自求,再做合并比直接求得的结果,轮廓更加的明显

机器学习进阶-图像梯度运算-Sobel算子 1. cv2.Sobel(使用Sobel算子进行计算) 2. cv2.convertScalerAbs(将像素点进行绝对值的计算)的更多相关文章

  1. 机器学习进阶-图像梯度计算-scharr算子与laplacian算子(拉普拉斯) 1.cv2.Scharr(使用scharr算子进行计算) 2.cv2.laplician(使用拉普拉斯算子进行计算)

    1. cv2.Scharr(src,ddepth, dx, dy), 使用Scharr算子进行计算 参数说明:src表示输入的图片,ddepth表示图片的深度,通常使用-1, 这里使用cv2.CV_6 ...

  2. 机器学习进阶-图像形态学操作-梯度运算 cv2.GRADIENT(梯度运算-膨胀图像-腐蚀后的图像)

    1.op = cv2.GRADIENT 用于梯度运算-膨胀图像-腐蚀后的图像 梯度运算:表示的是将膨胀以后的图像 - 腐蚀后的图像,获得了最终的边缘轮廓 代码: 第一步:读取pie图片 第二步:进行腐 ...

  3. 机器学习进阶-图像金字塔与轮廓检测-模板匹配(单目标匹配和多目标匹配)1.cv2.matchTemplate(进行模板匹配) 2.cv2.minMaxLoc(找出矩阵最大值和最小值的位置(x,y)) 3.cv2.rectangle(在图像上画矩形)

    1. cv2.matchTemplate(src, template, method)  # 用于进行模板匹配 参数说明: src目标图像, template模板,method使用什么指标做模板的匹配 ...

  4. 机器学习进阶-图像金字塔与轮廓检测-轮廓检测 1.cv2.cvtColor(图像颜色转换) 2.cv2.findContours(找出图像的轮廓) 3.cv2.drawContours(画出图像轮廓) 4.cv2.contourArea(轮廓面积) 5.cv2.arcLength(轮廓周长) 6.cv2.aprroxPloyDP(获得轮廓近似) 7.cv2.boudingrect(外接圆)..

    1. cv2.cvtcolor(img, cv2.COLOR_BGR2GRAY) # 将彩色图转换为灰度图 参数说明: img表示输入的图片, cv2.COLOR_BGR2GRAY表示颜色的变换形式 ...

  5. 机器学习进阶-图像金字塔与轮廓检测-图像金字塔-(**高斯金字塔) 1.cv2.pyrDown(对图片做向下采样) 2.cv2.pyrUp(对图片做向上采样)

    1.cv2.pyrDown(src)  对图片做向下采样操作,通常也可以做模糊化处理 参数说明:src表示输入的图片 2.cv2.pyrUp(src) 对图片做向上采样操作 参数说明:src表示输入的 ...

  6. 机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)

    1.cv2.dilate(src, kernel, iteration) 参数说明: src表示输入的图片, kernel表示方框的大小, iteration表示迭代的次数 膨胀操作原理:存在一个ke ...

  7. 机器学习进阶-图像形态学操作-腐蚀操作 1.cv2.erode(进行腐蚀操作)

    1.cv2.erode(src, kernel, iteration) 参数说明:src表示的是输入图片,kernel表示的是方框的大小,iteration表示迭代的次数 腐蚀操作原理:存在一个ker ...

  8. 机器学习进阶-图像基本操作-图像数据读取 1.cv2.imread(图片读入) 2.cv2.imshow(图片展示) 3.cv2.waitKey(图片停留的时间) 4.cv2.destroyAllWindows(清除所有的方框界面) 5.cv2.imwrite(对图片进行保存)

    1. cv2.imread('cat.jpg', cv2.IMGREAD_GRAYSCALE)  # 使用imread读入图像(BGR顺序), 使用IMGREAD_GRAYSCALE 使得读入的图片为 ...

  9. 机器学习进阶-图像形态学变化-礼帽与黑帽 1.cv2.TOPHAT(礼帽-原始图片-开运算后图片) 2.cv2.BLACKHAT(黑帽 闭运算-原始图片)

    1.op = cv2.TOPHAT  礼帽:原始图片-开运算后的图片 2. op=cv2.BLACKHAT 黑帽: 闭运算后的图片-原始图片 礼帽:表示的是原始图像-开运算(先腐蚀再膨胀)以后的图像 ...

随机推荐

  1. Java学习——方法中传递参数分简单类型与复杂类型(引用类型)编程计算100+98+96+。。。+4+2+1的值,用递归方法实现

    package hello; public class digui { public static void main(String[] args) { // TODO Auto-generated ...

  2. DockerFile服务

    Dockerfile分为四部分:基础镜像信息.镜像创建者信息.镜像操作指令.容器启动执行指令. 一.Dockerfile的书写规则及指令使用方法 Dockerfile的指令是忽略大小写的,建议使用大写 ...

  3. ROS设备的性价比图

  4. [UE4]扔枪后捡枪:Get Overlapping Actors

    一.搜索碰撞体是否碰撞到枪,使用Get Overlapping Actors,只搜索Class Filter设置的对象类型.Get Overlapping Actors没有Class Filter参数 ...

  5. [UE4]传送门:场景切换

  6. [UE4]认识Decorator

    Decorator装饰器:即为其他行为树系统中的条件语句,附着于一个Composite(组合节点)或者Task(任务节点),并定义树中的一个分支或者单个节点是否可被执行. Decorator装饰器节点 ...

  7. phpmyadmin在nginx环境下配置错误

    location ~ \.css {           add_header  Content-Type    text/css;        } location ~ \.js {        ...

  8. Java的Start和Runnable方法的区别

    两种方法的区别 1) start:用法:start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码.通过调用Thread类的start()方法来启动一 ...

  9. ubuntu14.04安装telnet

    1.首先查看telnet运行状态 netstat -a | grep telnet 输出为空,表示没有开启该服务 2.安装openbsd-inetd apt-get install openbsd-i ...

  10. windows server 2008通过任务计划程序定时访问网站

    1.新一个.bat文件,如: @echo offstart 网址exit 2.打windows server 2008,新建任务计划程序定时访问任务