OpenCV——Sobel边缘检测

OpenCV——Sobel边缘检测OpenCV Sobel 边缘检测 C 及 python 代码实现

一、Sobel算法

1、算法概述

  1. 提取X方向的边缘,X方向一阶Sobel边缘检测算法为:
    [ − 1 0 1 − 2 0 2 − 1 0 1 ] (1) \left[ \begin{matrix} -1 & 0 & 1\\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{matrix} \right] \tag{1} 121000121(1)

  2. 提取Y方向的边缘,Y方向一阶Sobel边缘检测算法为:
    [ − 1 − 2 − 1 0 0 0 1 2 1 ] (2) \left[ \begin{matrix} -1 & -2 & -1\\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{matrix} \right] \tag{2} 101202101(2)

  3. 综合两个方向的边缘信息得到整幅图像的边缘。

2、主要函数

Sobel_x_or_y = cv2.Sobel(src, ddepth, dx, dy, dst, ksize, scale, delta, borderType) 
  • src:传入的图像
  • ddepth:图像的深度
  • dxdy:指的是求导的阶数,0表示这个方向上没有求导,所填的数一般为0、1、2。
  • ksize:是Sobel算子的大小,即卷积核的大小,必须为奇数1、3、5、7。如果ksize=-1,就演变成为3×3的Scharr算子,scale是缩放导数的比例常数,默认情况为没有伸缩系数。
  • borderType:是判断图像边界的模式,这个参数默认值为cv2.BORDER_DEFAULT。
  • dstdst之后的参数都是可选参数。

二、C++代码

#include  
     #include  
     using namespace cv; using namespace std; int main() { 
    //----------------读取图像----------------- Mat img = imread("1.jpg"); //黑白图像边缘检测结果较为明显 Mat gray_img; cvtColor(img, gray_img, COLOR_BGR2GRAY); Mat resultX, resultY, resultXY; //-------------Sobel边缘检测-------------- //X方向一阶边缘 Sobel(img, resultX, CV_16S, 2, 0, 1); convertScaleAbs(resultX, resultX); //Y方向一阶边缘 Sobel(img, resultY, CV_16S, 0, 1, 3); convertScaleAbs(resultY, resultY); //整幅图像的一阶边缘 resultXY = resultX + resultY; //显示图像 imshow("resultX", resultX); imshow("resultY", resultY); imshow("resultXY", resultXY); waitKey(0); return 0; } 

三、python代码

import cv2 img = cv2.imread("1.jpg") gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # -------------------Sobel边缘检测------------------------ x = cv2.Sobel(gray_img, cv2.CV_16S, 1, 0) y = cv2.Sobel(gray_img, cv2.CV_16S, 0, 1) # cv2.convertScaleAbs(src[, dst[, alpha[, beta]]]) # 可选参数alpha是伸缩系数,beta是加到结果上的一个值,结果返回uint类型的图像 Scale_absX = cv2.convertScaleAbs(x) # convert 转换 scale 缩放 Scale_absY = cv2.convertScaleAbs(y) result = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0) # ----------------------显示结果---------------------------- cv2.imshow('img', gray_img) cv2.imshow('Scale_absX', Scale_absX) cv2.imshow('Scale_absY', Scale_absY) cv2.imshow('result', result) cv2.waitKey(0) cv2.destroyAllWindows() 

四、结果展示

1、灰度图

在这里插入图片描述

2、X方向一阶边缘

在这里插入图片描述

2、Y方向一阶边缘

在这里插入图片描述

3、整幅图像的一阶边缘

在这里插入图片描述

五、相关链接

[1] python+OpenCV图像处理(八)边缘检测

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206121.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:25
下一篇 2026年3月19日 下午4:25


相关推荐

  • SimpleDateFormat 格式化日期

    SimpleDateFormat 格式化日期包含在 Java 的 java text SimpleDateFo 包中日期和时间格式由 nbsp 日期和时间模式字符串 nbsp 指定 在 nbsp 日期和时间模式字符串 nbsp 中 未加引号的字母 A 到 Z 和 a 到 z 被解释为模式字母 用来表示日期或时间字符串元素 文本可以使用单引号 引起来 以免进行解释 所有其他字符均不解释 只是在格式化时将它们简单复制到输出字符串白话文的讲 这些 A Z a

    2026年3月18日
    2
  • springBoot整合Mybatis-Plus需要的依赖_springboot中文手册

    springBoot整合Mybatis-Plus需要的依赖_springboot中文手册Springboot整合TKMapper使用TKMapper无需再创建mapper.xml文件首先基于springboot完成对MyBatis的整合,然后再对TKMapper进行整合1创建springboot项目勾选必要的依赖整合mybatis引入了mybatis的依赖,就需要配置数据库,创建application.yml文件spring:datasource:url:jdbc:mysql://192.168.1.2:3306/learn_tkmapper?serve

    2026年4月17日
    11
  • 为什么我说,本地部署OpenClaw和用ChatGPT网页版是完全不同的两件事

    为什么我说,本地部署OpenClaw和用ChatGPT网页版是完全不同的两件事

    2026年3月13日
    2
  • OHEM算法及Caffe代码详解

    OHEM算法及Caffe代码详解这是CVPR2016的一篇论文,用于目标检测,本篇博文先介绍这个算法,然后介绍其Caffe代码。论文:TrainingRegion-basedObjectDetectorswithOnlineHardExampleMining论文链接:https://arxiv.org/abs/1604.03540算法概述:OHEM(onlinehardexampleminiing)算法的

    2022年5月22日
    39
  • 常见单元测试工具介绍

    常见单元测试工具介绍1 nbsp nbsp nbsp nbsp nbsp nbsp nbsp C C 语言开发的首选利器 C Test nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 以前在 windows 平台下的开发 使用的框架主要是 MFC 以及 console 工程 基于 win32SDK 属于纯 C C 开发的范畴 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 因此 使用的单元测试工具 主要有 C Test 和 CppUnit 两种 其中又以前者为主 因为具有直接导入 VC 工程 以及自动生成测试集合 用

    2026年3月17日
    1
  • 装OpenClaw送小龙虾!京东云OpenClaw现场免费安装

    装OpenClaw送小龙虾!京东云OpenClaw现场免费安装

    2026年3月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号