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使用paramiko实现远程拷贝文件的方法
Apr 18 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
详解Python传入参数的几种方法
May 16 Python
python中的协程深入理解
Jun 10 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
python实现四人制扑克牌游戏
Apr 22 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 Python
分享Python获取本机IP地址的几种方法
Mar 17 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中的正则表达式函数介绍
2012/02/27 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
理解javascript中的闭包
2017/01/11 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
简单谈谈python中的多进程
2016/11/06 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
python进行TCP端口扫描的实现
2018/12/21 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
Django Form常用功能及代码示例
2020/10/13 Python
python实现ping命令小程序
2020/12/28 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
小加工厂管理制度
2014/01/21 职场文书
工厂车间标语
2014/06/19 职场文书
员工教育培训协议书
2014/09/27 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
利用Python实时获取steam特惠游戏数据
2022/06/25 Python
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL