实现思路:

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

结果:

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

时间: 2019-08-19

python实现sobel_python通过robert、sobel、Laplace算子实现图像边缘提取详解相关推荐

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

    实现思路: 1,将传进来的图片矩阵用算子进行卷积求和(卷积和取绝对值) 2,用新的矩阵(与原图一样大小)去接收每次的卷积和的值 3,卷积图片所有的像素点后,把新的矩阵数据类型转化为uint8 注意: ...

  2. python sobel算子_python自编程序实现——robert算子、sobel算子、Laplace算子进行图像边缘提取...

    实现思路: 1,将传进来的图片矩阵用算子进行卷积求和(卷积和取绝对值) 2,用新的矩阵(与原图一样大小)去接收每次的卷积和的值 3,卷积图片所有的像素点后,把新的矩阵数据类型转化为uint8 注意: ...

  3. 2020.11.05 使用OpenCV进行自定义线性滤波 【OpenCV C++ Robert/Sobel/Laplace】

    使用OpenCV进行自定义线性滤波/Robert/Sobel/Laplace 源代码: // testOpencv14.cpp : 此文件包含 "main" 函数.程序执行将在此处 ...

  4. python爬取图片-Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先 ...

  5. python3d动态图-Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

  6. python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解

    圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 impo ...

  7. python硬件交互_对Python的交互模式和直接运行.py文件的区别详解

    对Python的交互模式和直接运行.py文件的区别详解 看到类似C:\>是在Windows提供的命令行模式,看到>>>是在Python交互式环境下. 在命令行模式下,可以执行p ...

  8. python编译器怎么运行不在路径中的py文件_对python当中不在本路径的py文件的引用详解...

    众所周知,如果py文件不在当前路径,那么就不能import,因此,本文介绍如下两种有效的方法: 方法1: 修改环境变量,在~/.bashrc里面进行修改,然后source ~/.bashrc 方法2: ...

  9. python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...

    第8.3节Python类的__init__方法深入剖析:构造方法与继承详解 一.    引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类没 ...

最新文章

  1. React中的方法调用
  2. 39.数组中数值和下标相等的元素
  3. 在 SQLite3 中使用回调函数
  4. 50道编程小题目之【质数的个数】
  5. C语言中从键盘中输入到数组,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
  6. 北京允许无人车上路后,Pony.ai正式广州开跑
  7. 办暂住证,郁闷,极度不爽.
  8. day13、1 - 抓包--科来软件使用
  9. java中set,get用法
  10. 服务器无线网络禁用启用无效,无线网络卡一直被禁用,无法启用
  11. 202.Wex5开发环境的安装与基本使用 2019.08.29
  12. 普通带条件查询接口报错 Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError:
  13. h5加java棋牌_Html5斗地主棋牌架设Canvas实现斗地主游戏代码解析
  14. 两万字,清华刘云浩教授回答新生关于AI的90个问题
  15. 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原
  16. Revit中项目特别大如何将项目完整的体现在图纸中?
  17. windows xp 系统CMD命令大全(一)
  18. CSS之BFC、IFC、GFC、FFC简述
  19. LanSecS(堡垒主机)内控管理平台产品方案
  20. php yield 返回值,[PHP] yield沟通函数循环内外

热门文章

  1. 正则化的作用以及L1和L2正则化的区别
  2. iview UI Table 使用总结
  3. 使用Vlayout打造淘宝首页
  4. VMware Workstation 15虚拟机使用教程
  5. 邮件设置 ssl://smtp.exmail.qq.com:465 can not connect to the SMTP server
  6. 宝塔mysql5.6安装不了_宝塔面板Mysql 5.6版本无法正常启动的解决方法
  7. java 两字符串相同,关于java:使用==比较两个相同的字符串将返回false
  8. js异步实例之跨域获取图片
  9. homework作业
  10. 让两个DIV在同一行