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 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
分析python切片原理和方法
Dec 19 Python
python奇偶行分开存储实现代码
Mar 19 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
Python程序打包工具py2exe和PyInstaller详解
Jun 28 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
Python使用tkinter模块实现推箱子游戏
Oct 08 Python
pycharm运行程序时看不到任何结果显示的解决
Feb 21 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
Python grpc超时机制代码示例
Sep 14 Python
python3中TQDM库安装及使用详解
Nov 18 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 array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
python实现解数独程序代码
2017/04/12 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
Python如何实现的二分查找算法
2020/05/27 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
JMS中Topic和Queue有什么区别
2013/05/15 面试题
自荐信需注意事项
2014/01/25 职场文书
语文教学感言
2014/02/06 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript