sobel边缘检测即实现对图像边缘的提取,输入为一幅图像,输出为图像轮廓。
sobel算法步骤:
(1)将输入图像转为灰度图;
(2)对灰度图进行二值化处理(此过程采用otsu二值化算法,具体otsu算法参看上一篇博客);
(3)定义sobel竖直和水平卷积算子;
(4)遍历图像像素点,除边缘像素点外,每个像素点的领域像素点(共计九个像素点)分别与sobel算子(竖直和水平卷积算子)值相乘累加;
(5)将竖直和水平sobel算子乘积值绝对值之后相加,赋于新的与原图像相等大小的矩阵中。

import cv2 as cv
import math
import numpy as npdef rgb2gray(img):h=img.shape[0]w=img.shape[1]img1=np.zeros((h,w),np.uint8)for i in range(h):for j in range(w):img1[i,j]=0.144*img[i,j,0]+0.587*img[i,j,1]+0.299*img[i,j,1]return img1def otsu(img):h=img.shape[0]w=img.shape[1]m=h*w   # 图像像素点总和otsuimg=np.zeros((h,w),np.uint8)threshold_max=threshold=0   # 定义阈值histogram=np.zeros(256,np.int32)   # 初始化各灰度级个数统计参数probability=np.zeros(256,np.float32)   # 初始化各灰度级占图像中的分布的统计参数for i in range (h):for j in range (w):s=img[i,j]histogram[s]+=1   # 统计灰度级中每个像素在整幅图像中的个数for k in range (256):probability[k]=histogram[k]/m   # 统计每个灰度级占图像中的分布for i in range (255):w0 = w1 = 0  # 定义前景像素点和背景像素点灰度级占图像中的分布fgs = bgs = 0  # 定义前景像素点灰度级总和and背景像素点灰度级总和for j in range (256):if j<=i:   # 当前i为分割阈值w0+=probability[j]   # 前景像素点占整幅图像的比例累加fgs+=j*probability[j]else:w1+=probability[j]   # 背景像素点占整幅图像的比例累加bgs+=j*probability[j]u0=fgs/w0   # 前景像素点的平均灰度u1=bgs/w1   # 背景像素点的平均灰度g=w0*w1*(u0-u1)**2   # 类间方差if g>=threshold_max:threshold_max=gthreshold=iprint(threshold)for i in range (h):for j in range (w):if img[i,j]>threshold:otsuimg[i,j]=255else:otsuimg[i,j]=0return otsuimgdef sobel(img):h=img.shape[0]w=img.shape[1]sobelimg=np.zeros((h,w),np.uint8)sobelx=[[-1,0,1],[-2,0,2],[-1,0,1]]sobely=[[1,2,1],[0,0,0],[-1,-2,-1]]sobelx=np.array(sobelx)sobely=np.array(sobely)gx=0   # 垂直方向上的梯度模长gy=0   # 水平方向上的梯度模长for i in range(1,h-1):for j in range(1,w-1):edgex=0edgey=0for k in range(-1,2):for l in range(-1,2):edgex+=img[k+i,l+j]*sobelx[1+k,1+l]edgey+=img[k+i,l+j]*sobely[1+k,1+l]gx=abs(edgex)gy=abs(edgey)gramag=gx+gysobelimg[i,j]=gramagreturn sobelimgimage=cv.imread("D:/sobel.png")
grayimage=rgb2gray(image)
otsuimage=otsu(grayimage)
sobelimage=sobel(otsuimage)
cv.imshow("image",image)
cv.imshow("sobelimage",sobelimage)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果:

通过实验结果可以看出效果并不好,说明关于源码编写仍有不少瑕疵,希望各位可以分享更为高效的代码,谢谢。

Python+OpenCV实现sobel边缘检测相关推荐

  1. Python+OpenCV:Canny边缘检测

    Python+OpenCV:Canny边缘检测 理论 Canny边缘检测是目前比较流行的边缘检测算法,它由John F. Canny发明. 1. 这是一个多阶段的算法. 2. 降噪:由于边缘检测容易受 ...

  2. python+opencv图像处理之边缘检测车道线识别

    python+opencv图像处理之边缘检测车道线识别 1.自行安装python和opencv 2.导入我们要使用的相关库 import cv2 from matplotlib import pypl ...

  3. OpenCV/CUDA—Sobel边缘检测

    一.OpenCV-Sobel边缘检测 #include <opencv2/opencv.hpp> #include <math.h> #include <iostream ...

  4. C/C++ OpenCV之Sobel边缘检测

    Void Sobel( outputArray src, int depth, int dx, int dy, int ksize=3, double scale=1, double delat=0, ...

  5. opencv图像处理之边缘检测

    边缘检测 1 原理 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点.图像属性中的显著变化通常反映了属性的重要事件和变化. 图像边缘检测大幅度地减少了数据量, ...

  6. python+OpenCv笔记(十三):边缘检测——Sobel检测算子

    Sobel检测算子 概述: Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,但是很多实际应用的场合,sobel边缘却是首选,Sobel算子 ...

  7. python opencv sobel_OpenCV实战(一): Sobel、Laplacian、Canny 边缘检测

    简述 OpenCV边缘检测的一般步骤为: 滤波 增强 检测 常用的边缘检测的算子和滤波器有: Sobel算子 Laplacian算子 Canny算子 Scharr滤波器 以下使用Sobel.Lapla ...

  8. [Python图像处理] 四十二.Python图像锐化及边缘检测万字详解(Roberts、Prewitt、Sobel、Laplacian、Canny、LOG)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. Python OpenCv 车牌检测识别(边缘检测、HSV色彩空间判断)

    Python OpenCv 车牌检测识别 背景 车牌识别在交通.停车等方面有着广泛应用,在网上也有很多种基于OpenCV方案进行识别,本文是综合了两种比较流行的方案,首先是提取出疑似车牌区域的轮廓,然 ...

  10. python opencv边缘检测

    通过Opencv进行边缘检测可以说是十分常见了,接下来让我们聊一聊如何通过python opencv一步一步实现边缘检测 重要函数讲解 图片读取函数: pic = cv2.imread(file_pa ...

最新文章

  1. 深度学习原来还可以这么学!
  2. linux透明大页内存,rhel7.2 禁用透明的大页内存--transparent_hugepage(THP)
  3. jmetery压力测试工具
  4. 上海全球“编程一小时”活动记
  5. TypeScript里的高阶函数-返回函数的函数,以及对应的JavaScript代码
  6. linux 内核编程 延时函数,linux中内核延时编程
  7. Pytorch专题实战——前馈神经网络(Feed-Forward Neural Network)
  8. -矩阵-创建矩阵-简单方法
  9. localStorage、cookie的使用总结
  10. 操作系统之伙伴堆实现
  11. Ubuntu安装Windows字体
  12. 【刘润五分钟商学院】-151幸存者偏见
  13. 树莓派获取root权限
  14. 服务器共享文档只读不可复制,局域网共享文件只读不存、共享文件只读不能复制设置法...
  15. 解决vs2008安装问题 Office 2007 Microsoft Visual Studio Web 创作组件 安装失败
  16. 宏文件下载_新星邮件速递专家2021免费版-新星邮件速递专家2021正式版下载
  17. vijos 1641 Vs Snowy
  18. 三,python基础初识。
  19. Invalid Host/Origin header vue项目
  20. [C#入门] 函数 | 方法

热门文章

  1. linux修改u盘mbr,远景论坛U盘版 完美 4G/8G/16G WINPE+LINUXPE+MACPE+10.9正式版MBR安装版 制作超简单...
  2. MQL5 编程基础:时间
  3. Android腾讯信鸽推送
  4. WPF使用 Gmap.NET 绘制极坐标运动轨迹
  5. 荣誉背后的故事:达内到底有多强?
  6. 对期货大赛获奖者杨宏斌、陈伟的采访
  7. paraview热流图(5):只保留一个网格
  8. MATLAB绘图总结
  9. EduCoder_web实训作业--JavaScript学习手册八:JS函数
  10. A*求解带时间窗的路径规划问题