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


Posted in Python onAugust 21, 2019

实现思路:

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()

结果:

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

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

Python 相关文章推荐
python编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
python判断windows隐藏文件的方法
Mar 21 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
python中时间模块的基本使用教程
May 14 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
基于多进程中APScheduler重复运行的解决方法
Jul 22 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
python根据文本生成词云图代码实例
Nov 15 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
Jul 14 Python
Prometheus开发中间件Exporter过程详解
Nov 30 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 Python
Python爬虫:url中带字典列表参数的编码转换方法
Aug 21 #Python
Python GUI学习之登录系统界面篇
Aug 21 #Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 #Python
利用python在大量数据文件下删除某一行的例子
Aug 21 #Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 #Python
详解用Python为直方图绘制拟合曲线的两种方法
Aug 21 #Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 #Python
You might like
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
php基本函数汇总
2015/07/09 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
Python中的zipfile模块使用详解
2015/06/25 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
少先队入队活动方案
2014/02/08 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
初中数学教学反思范文
2016/02/17 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
Python3 如何开启自带http服务
2021/05/18 Python
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
Java spring单点登录系统
2021/09/04 Java/Android
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL