一、图像的梯度处理
1、Sobel算子
梯度可以按照x方向或者y方向求梯度,其实就是在看像素点的差异变化情况,比如黑白物体的交界,其像素值变化差异是非常大的。
求梯度计算使用的函数就叫做Sobel算子,可以分为水平梯度与竖直梯度。
简单点说,Sobel算子是一种特殊的卷积核,可以用于图像的边缘检测。自定义一个水平及竖直方向的sobel算子:

# 水平sobel算子
Sobel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])
# 竖直方向的sobel算子
Sobel_y = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])

可以看到使用sobel算子进行卷积计算的时候,就是将中间像素点的一圈像素进行相应的加减操作。
如果是位于同一颜色内的像素点进行卷积操作,那么运算结果就会等于0,因为左右值都是相同的。
opencv里的函数:

dst = cv.Sobel(src, ddepth, dx, dy, ksize)

ddepth:表示传入图像的深度(颜色通道个数)
src:传入图像
dx和dy分别表示水平方向和竖直方向
ksize:表示sobel算子的大小
cv.CV_64F:表示将运算结果使用更大的存储方式存储,因为可能出现负数
代码实现sobel算子:

def f_sobel():img = cv.imread("car_red.jpg", cv.IMREAD_GRAYSCALE)# 水平sobel算子Sobel_x = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]])# 竖直方向的sobel算子Sobel_y = np.array([[-1, 0, -2],[0, 0, 0],[1, 0, 2]])dst = cv.Sobel(img, cv.CV_64F, dx=1, dy=0, ksize=3)cv.imshow("zero", dst)cv.waitKey(0)cv.destroyAllWindows()

运行结果如图:

结果并不理想,这是由于右值减去左值的结果并不是一直为正,有的时候就负数,opencv会自动把负数进行截断取0操作,因此这个时候就要把负数改变为正数。

def f_sobel():img = cv.imread("car_red.jpg", cv.IMREAD_GRAYSCALE)# 水平sobel算子Sobel_x = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]])# 竖直方向的sobel算子Sobel_y = np.array([[-1, 0, -2],[0, 0, 0],[1, 0, 2]])dst = cv.Sobel(img, cv.CV_64F, 1, 0, ksize=3)# 这条代码将正负取绝对值dst = cv.convertScaleAbs(dst)cv.imshow("zero", dst)cv.waitKey(0)cv.destroyAllWindows()

边界比较清晰:

同时,使用水平或者竖直方向得到的结果也是有差异的。所以可以对水平方向和竖直方向都进行Sobel算子计算,然后将得到的两幅梯度图再进行相加,就可以得到完整的轮廓图像。
代码:

def f_sobel():img = cv.imread("car_red.jpg", cv.IMREAD_GRAYSCALE)# 水平sobel算子Sobel_x = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]])# 竖直方向的sobel算子Sobel_y = np.array([[-1, 0, -2],[0, 0, 0],[1, 0, 2]])dst_x = cv.Sobel(img, cv.CV_64F, 1, 0, ksize=3)dst_y = cv.Sobel(img, cv.CV_64F, 0, 1, ksize=3)dst_y = cv.convertScaleAbs(dst_y)dst_x = cv.convertScaleAbs(dst_x)dst = cv.addWeighted(dst_x, 0.5, dst_y, 0.5, 0)cv.imshow("zero", dst)cv.waitKey(0)cv.destroyAllWindows()

结果:

Scharr算子:与Sobel算子相比,数值更大,对结果的差异更加敏感。

laplacian算子:对噪音点更敏感

# 水平Scharr算子
Scharr = np.array([[-3, 0, 3],[-10, 0, 10],[-3, 0, 3]])
# laplacian算子
laplacian = np.array([[0, 1, 0],[1, -4, 1],[0, 1, 0]])

函数体:

# 参数与Sobel算子类似
cv2.Scharr(src, dx, dy....)
# 拉普拉斯算子不区分x, y方向。因此没有dx, dy参数
cv2.Laplacian(src...)

opencv-python图像处理 ----图像梯度、Sobel算子相关推荐

  1. OpenCV+python:图像梯度

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

  2. OpenCV--033_2: 图像梯度--Sobel算子

    索贝尔算子(Sobel operator) 主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量. So ...

  3. OpenCV-Python图像梯度 Sobel算子

    图像的梯度计算的是图像变化的速度,对于边缘部分呢灰度值变换大,梯度值也大,相反则灰度值变化小,梯度值小 Sobel算子是一种离散的微分算子,该算子结合了高斯平滑处理和微分求导运算. 该算子利用局部差寻 ...

  4. opencv for python的图像梯度算子以及canny边缘检测

    opencv for python的图像梯度算子以及canny边缘检测 一.图像梯度算子: 二.Canny边缘检测(一个多级边缘检测算法): 一.图像梯度算子: 1.概念简介(部分引自百度百科): 图 ...

  5. 【OpenCV 例程200篇】64. 图像锐化——Sobel 算子

    [OpenCV 例程200篇]64. 图像锐化--Sobel 算子 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 3 ...

  6. Opencv(python)图像梯度和边缘检测算法

    1.图像梯度 图像梯度计算的是图像的边缘信息 ,图像梯度计算的是图像变化的速度.对于图像的边缘部分,其灰度值变化较大,梯度值也较大,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小.图像 ...

  7. OpenCV中的图像处理 —— 图像梯度+Canny边缘检测+图像金字塔

    OpenCV中的图像处理 -- 图像梯度+Canny边缘检测+图像金字塔 目录 OpenCV中的图像处理 -- 图像梯度+Canny边缘检测+图像金字塔 1. 图像梯度 1.1 Sobel和Schar ...

  8. Opencv Python图像处理进阶教程②

    Opencv Python图像处理进阶教程 概述: 代码: https://github.com/bai1231/opencv-learn_and_pratice 1. 图像卷积与应用 图像去噪 图像 ...

  9. openCV—Python(6)—— 图像算数与逻辑运算

    openCV-Python(6)-- 图像算数与逻辑运算 一.函数简介 1.add-图像矩阵相加 函数原型:add(src1, src2, dst=None, mask=None, dtype=Non ...

  10. OpenCV python 提取图像内的三色

    OpenCV python 提取图像内的三色 原图 [opencv.jpg] import cv2 import numpy as npdef main():# 1.导入图片img_src = cv2 ...

最新文章

  1. 7个华丽的基于Canvas的HTML5动画
  2. Unity3D在iOS下为啥不能更新的资料收集
  3. 一种 Web 应用程序级别的 Cluster 实现技术
  4. Activity和Task
  5. Leetcode300. Longest Increasing Subsequence最长上升子序列
  6. C#计算一段程序运行时间的三种方法
  7. oracle 空间数据字段,Oracle spatial创建空间数据的字段详解
  8. Java事实让您大吃一惊! (信息图)
  9. select2控件动态更新option
  10. idea中Error:java: Compilation failed: internal java compiler error
  11. DSL 系列(1) - 扩展点的论述与实现
  12. redis远程连接的几种方式
  13. 南京江北新区科创园非常漂亮
  14. 利用root权限随意对app进行保资料降级 99%成功
  15. 如何设置小程序背景图片大小
  16. 判断鼠标滑轮滚动事件
  17. 有适合宝妈在家做的兼职推荐吗?5个适合在家做的副业兼职!
  18. XML和JSON-自我小结
  19. Elasticsearch 压测方案之 es rally 简介
  20. 《一斛珠·元夜月蚀》

热门文章

  1. php模拟登录教学视频,php使用curl模拟登录人人(校内)网_PHP教程
  2. php网页中出现问号,HTML_地址栏中的问号有什么作用,之前我们曾经解释?过链接地址 - phpStudy...
  3. 雨林木风4.0 使用之体验
  4. The located assembly's manifest definition does not match the assembly reference
  5. 信通可以保研计算机吗,保研经历(一)北邮信通院
  6. 碎碎念 2022.4.25
  7. 【保姆级教程】在龙芯3A5000上编译arrow-0.15.1
  8. Flash 8中文版基本功能与典型实例视频教程
  9. 计算机质量度,2016度质量度报告.doc
  10. 干货文——一文带你搞懂爬虫储存数据库MongoDB