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使用simplejson模块解析JSON的方法
Mar 24 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
django中related_name的用法说明
May 20 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 Python
python爬取新闻门户网站的示例
Apr 25 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
Jun 09 Python
再谈python_tkinter弹出对话框创建
Mar 20 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中的流(streams)浅析
2015/07/02 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
Prototype Function对象 学习
2009/07/12 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
python编码最佳实践之总结
2016/02/14 Python
python实现解数独程序代码
2017/04/12 Python
不可错过的十本Python好书
2017/07/06 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
出生公证书样本
2014/04/04 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
python中的被动信息搜集
2021/04/29 Python
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android