python实现sobel_python通过robert、sobel、Laplace算子实现图像边缘提取详解
实现思路:
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算子实现图像边缘提取详解相关推荐
- python图像边缘提取_python通过robert、sobel、Laplace算子实现图像边缘提取详解
实现思路: 1,将传进来的图片矩阵用算子进行卷积求和(卷积和取绝对值) 2,用新的矩阵(与原图一样大小)去接收每次的卷积和的值 3,卷积图片所有的像素点后,把新的矩阵数据类型转化为uint8 注意: ...
- python sobel算子_python自编程序实现——robert算子、sobel算子、Laplace算子进行图像边缘提取...
实现思路: 1,将传进来的图片矩阵用算子进行卷积求和(卷积和取绝对值) 2,用新的矩阵(与原图一样大小)去接收每次的卷积和的值 3,卷积图片所有的像素点后,把新的矩阵数据类型转化为uint8 注意: ...
- 2020.11.05 使用OpenCV进行自定义线性滤波 【OpenCV C++ Robert/Sobel/Laplace】
使用OpenCV进行自定义线性滤波/Robert/Sobel/Laplace 源代码: // testOpencv14.cpp : 此文件包含 "main" 函数.程序执行将在此处 ...
- python爬取图片-Python爬取网页中的图片(搜狗图片)详解
前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先 ...
- python3d动态图-Python图像处理之gif动态图的解析与合成操作详解
本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...
- python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解
圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 impo ...
- python硬件交互_对Python的交互模式和直接运行.py文件的区别详解
对Python的交互模式和直接运行.py文件的区别详解 看到类似C:\>是在Windows提供的命令行模式,看到>>>是在Python交互式环境下. 在命令行模式下,可以执行p ...
- python编译器怎么运行不在路径中的py文件_对python当中不在本路径的py文件的引用详解...
众所周知,如果py文件不在当前路径,那么就不能import,因此,本文介绍如下两种有效的方法: 方法1: 修改环境变量,在~/.bashrc里面进行修改,然后source ~/.bashrc 方法2: ...
- python类继承中构造方法_第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解...
第8.3节Python类的__init__方法深入剖析:构造方法与继承详解 一. 引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类没 ...
最新文章
- React中的方法调用
- 39.数组中数值和下标相等的元素
- 在 SQLite3 中使用回调函数
- 50道编程小题目之【质数的个数】
- C语言中从键盘中输入到数组,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
- 北京允许无人车上路后,Pony.ai正式广州开跑
- 办暂住证,郁闷,极度不爽.
- day13、1 - 抓包--科来软件使用
- java中set,get用法
- 服务器无线网络禁用启用无效,无线网络卡一直被禁用,无法启用
- 202.Wex5开发环境的安装与基本使用 2019.08.29
- 普通带条件查询接口报错 Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError:
- h5加java棋牌_Html5斗地主棋牌架设Canvas实现斗地主游戏代码解析
- 两万字,清华刘云浩教授回答新生关于AI的90个问题
- 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原
- Revit中项目特别大如何将项目完整的体现在图纸中?
- windows xp 系统CMD命令大全(一)
- CSS之BFC、IFC、GFC、FFC简述
- LanSecS(堡垒主机)内控管理平台产品方案
- php yield 返回值,[PHP] yield沟通函数循环内外
热门文章
- 正则化的作用以及L1和L2正则化的区别
- iview UI Table 使用总结
- 使用Vlayout打造淘宝首页
- VMware Workstation 15虚拟机使用教程
- 邮件设置 ssl://smtp.exmail.qq.com:465 can not connect to the SMTP server
- 宝塔mysql5.6安装不了_宝塔面板Mysql 5.6版本无法正常启动的解决方法
- java 两字符串相同,关于java:使用==比较两个相同的字符串将返回false
- js异步实例之跨域获取图片
- homework作业
- 让两个DIV在同一行