python通过robert、sobel、Laplace算子实现图像边缘提取详解

 更新时间:2019年08月21日 17:09:54   作者:成长中的菜鸟zhy  
这篇文章主要介绍了python通过robert、sobel、Laplace算子实现图像边缘提取详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

实现思路:

  1,将传进来的图片矩阵用算子进行卷积求和(卷积和取绝对值)

  2,用新的矩阵(与原图一样大小)去接收每次的卷积和的值

  3,卷积图片所有的像素点后,把新的矩阵数据类型转化为uint8

注意:

  必须对求得的卷积和的值求绝对值;矩阵数据类型进行转化。

完整代码:

import cv2
import numpy as np
 
# robert 算子[[-1,-1],[1,1]]
def robert_suanzi(img):
  r, c = img.shape
  r_sunnzi = [[-1,-1],[1,1]]
  for x in range(r):
    for y in range(c):
      if (y + 2 <= c) and (x + 2 <= r):
        imgChild = img[x:x+2, y:y+2]
        list_robert = r_sunnzi*imgChild
        img[x, y] = abs(list_robert.sum())   # 求和加绝对值
  return img
         
# # sobel算子的实现
def sobel_suanzi(img):
  r, c = img.shape
  new_image = np.zeros((r, c))
  new_imageX = np.zeros(img.shape)
  new_imageY = np.zeros(img.shape)
  s_suanziX = np.array([[-1,0,1],[-2,0,2],[-1,0,1]])   # X方向
  s_suanziY = np.array([[-1,-2,-1],[0,0,0],[1,2,1]])   
  for i in range(r-2):
    for j in range(c-2):
      new_imageX[i+1, j+1] = abs(np.sum(img[i:i+3, j:j+3] * s_suanziX))
      new_imageY[i+1, j+1] = abs(np.sum(img[i:i+3, j:j+3] * s_suanziY))
      new_image[i+1, j+1] = (new_imageX[i+1, j+1]*new_imageX[i+1,j+1] + new_imageY[i+1, j+1]*new_imageY[i+1,j+1])**0.5
  # return np.uint8(new_imageX)
  # return np.uint8(new_imageY)
  return np.uint8(new_image) # 无方向算子处理的图像
 
# Laplace算子
# 常用的Laplace算子模板 [[0,1,0],[1,-4,1],[0,1,0]]  [[1,1,1],[1,-8,1],[1,1,1]]
def Laplace_suanzi(img):
  r, c = img.shape
  new_image = np.zeros((r, c))
  L_sunnzi = np.array([[0,-1,0],[-1,4,-1],[0,-1,0]])   
  # L_sunnzi = np.array([[1,1,1],[1,-8,1],[1,1,1]])   
  for i in range(r-2):
    for j in range(c-2):
      new_image[i+1, j+1] = abs(np.sum(img[i:i+3, j:j+3] * L_sunnzi))
  return np.uint8(new_image)
 
 
img = cv2.imread('1.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image', img)
 
# # robers算子
out_robert = robert_suanzi(img)
cv2.imshow('out_robert_image', out_robert)
 
# sobel 算子
out_sobel = sobel_suanzi(img)
cv2.imshow('out_sobel_image', out_sobel)
 
# Laplace算子
out_laplace = Laplace_suanzi(img)
cv2.imshow('out_laplace_image', out_laplace)
 
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • OpenCV 边缘检测

    OpenCV 边缘检测

    OpenCV提供了许多边缘检测滤波函数,这些滤波函数都会将非边缘区域转为黑色,将边缘区域转为白色或其他饱和的颜色。这篇文章主要介绍了OpenCV 边缘检测,需要的朋友可以参考下
    2019-07-07
  • 解决pip install psycopg2出错问题

    解决pip install psycopg2出错问题

    这篇文章主要介绍了解决pip install psycopg2出错问题。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • django admin实现动态多选框表单的示例代码

    django admin实现动态多选框表单的示例代码

    借助django-admin,可以快速得到CRUD界面,但若需要创建多选标签字段时,需要对表单进行调整,本文通过示例代码给大家介绍django admin多选框表单的实现方法,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • python数据可视化plt库实例详解

    python数据可视化plt库实例详解

    这篇文章主要介绍了python可视化数据plt库实例,下面使用pycharm环境给大家详细介绍,文中提到jupyter和pycharm环境的差别,需要的朋友可以参考下
    2021-06-06
  • django python 获取当天日期的方法

    django python 获取当天日期的方法

    这篇文章主要介绍了django python 获取当天日期,在Python中,你可以使用datetime模块来获取当前日期,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Python实现多个Word文档合并

    Python实现多个Word文档合并

    在Python中,可以使用Python-docx库来操作Word文档,所以下面小编就为大家介绍一下如何利用Python-docx实现多个Word文档合并功能吧,需要的可以参考一下
    2023-06-06
  • Python创建空列表的字典2种方法详解

    Python创建空列表的字典2种方法详解

    这篇文章主要介绍了Python创建空列表的字典2种方法详解,需要的朋友可以参考下
    2020-02-02
  • Python通过websocket与js客户端通信示例分析

    Python通过websocket与js客户端通信示例分析

    网站大多使用 HTTP 协议通信,而 HTTP 是无连接的协议。只有客户端请求时,服务器端才能发出相应的应答, HTTP 请求的包也比较大,如果只是很小的数据通信,开销过大。于是,我们可以使用 websocket 这个协议,用最小的开销实现面向连接的通信。
    2014-06-06
  • Tensorflow简单验证码识别应用

    Tensorflow简单验证码识别应用

    这篇文章主要为大家详细介绍了Tensorflow简单验证码识别应用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • python使用tkinter打造三维绘图系统的示例代码

    python使用tkinter打造三维绘图系统的示例代码

    Python 的 tkinter 模块是一个常用的 GUI(图形用户界面)工具包,它能够让你创建窗口应用程序,你可以使用它来构建用户友好的界面,包括按钮、标签、文本框、列表框等各种控件,本文讲给大家介绍如何使用tkinter打造三维绘图系统,需要的朋友可以参考下
    2023-08-08

最新评论