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算子作图

  1. import cv2
  2. import numpy as np
  3.  
  4. # 第一步:加载图片
  5. img = cv2.imread('pie.png')
  6. cv2.imshow('original', img)
  7. cv2.waitKey(0)
  8. cv2.destroyAllWindows()

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

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

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

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

  1. # 第五步:并使用cv2.addweighted进行合并
  2. xy_sobel = cv2.addWeighted(x_sobel, 0.5, y_sobel, 0.5, 0)
  3.  
  4. # 第六步: 直接使用cv2.sobel 进行计算
  5. xy_sobel_direct = cv2.Sobel(img, cv2.CV_64F, 1, 1, ksize=3)
  6.  
  7. # 第七步:画图比较分步合并和一步到位的结果差异
  8. cv2.imshow('imgs', np.hstack((xy_sobel, xy_sobel_direct)))
  9. cv2.waitKey(0)
  10. 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. uoj#158. 【清华集训2015】静态仙人掌

    http://uoj.ac/problem/158 预处理dfs序,询问转为区间1的个数,用可持久化bitset预处理出所有可能的修改对应哪些位置,然后用一个bitset维护当前每个点的状态,修改时可 ...

  2. mac brew 安装 nginx fpm mysql 教程

    一. 安装brew 要求:OS X 10.6以上系统,并且安装有XCode命令行工具 对于10.11的系统需要设置下local的权限为当前用户 $ sudo chown -R $(whoami):ad ...

  3. C++进阶小结

    1.C++中类的不同存储区的对象的初始值 class test; class test { private: int i; int j; public: int geti() { return i; ...

  4. 网站钓鱼的方法 和 xss

    获取cookie利用代码cookie.asp <html> <title>xx</title> <body> <%testfile = Serve ...

  5. Volley 结合GSON或FastJson用法

    自定义GSON类 public class GsonRequest<T> extends Request<T> { private final Gson mGson = new ...

  6. [UE4]end快捷键,落地

    actor的根节点需要是实体模型才可以,end快捷键着地是让actor的根节点着地.

  7. 关于Centos7 firewalld防火墙开放端口后仍不能访问ftp和nginx的问题解决

    我在阿里轻量应用服务器搭建ftp服务器这篇博客中把防火墙换为iptables,因为当时无论我怎么设置firewalld,就是无法访问ftp服务器,今天在翻看其他博客的时候,突然发现firewalld有 ...

  8. Postgres 主从复制搭建步骤

    系统版本: CentOS Linux release 7.5.1804 (Core) 数据库 psql (PostgreSQL) 10.5 2台机器ip : 172.17.0.3 /172.17.0. ...

  9. python的json模块介绍

    转载:https://blog.csdn.net/xsj_blog/article/details/51921664 对于数据传递方面,XML是一种选择,还有一种选择是JSON,它是一种轻量级的数据交 ...

  10. java eclipse maven The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法

    在eclipse 中使用maven 创建java web项目,启动服务器遇到提示:The superclass "javax.servlet.http.HttpServlet" w ...