1 、卷积应用-图像边缘提取

Sobel 算子是一个离散微分算子 (discrete differentiation operator)。 它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一

图1中灰度值的”跃升”表示边缘的存在,图2中使用一阶微分求导我们可以更加清晰的看到边缘”跃升”的存在

测试图片

图一

图二

2 、解析

Sobel算子在x,y两个方向求导

image.png

最终结果

3 、整体代码测试

对于图像的处理,基本的步骤是这样的:

取得图像数据 —— 将图像进行平滑处理 —— 进行边缘检测,阈值分析 —— 进行形态学的操作 —— 获取某些特征点 —— 分析数据

CV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth,

int dx, int dy, int ksize = 3,

double scale = 1, double delta = 0,

int borderType = BORDER_DEFAULT );

ddepth:图像的颜色深度,针对不同的输入图像,输出目标图像有不同的深度,具体组合如下:

- 若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F

- 若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F

- 若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F

- 若src.depth() = CV_64F, 取ddepth = -1/CV_64F

dx:int类型的,表示x方向的差分阶数,1或0

dy:int类型的,表示y方向的差分阶数,1或0

kSize:模板大小,前面虽然提到过,不过对于Sobel算子这里要补充下,这里的取值为1,3,5,7,当不输入的时候,默认为3。特殊的,当kSize = 1的时候,采用的模板为1*3或者3*1 而非平时的那些格式。

CV_EXPORTS_W void Scharr( InputArray src, OutputArray dst, int ddepth,

int dx, int dy, double scale = 1, double delta = 0,

int borderType = BORDER_DEFAULT );

参数和Sobel算子一致,不过,该函数与Sobel的区别在于,Scharr仅作用于大小为3的内核。具有和sobel算子一样的速度,但结果更为精确

void cv::convertScaleAbs(

cv::InputArray src, // 输入数组

cv::OutputArray dst, // 输出数组

double alpha = 1.0, // 乘数因子

double beta = 0.0 // 偏移量

);

#include

#include

#include

using namespace cv;

int main(int argc, char** argv) {

Mat src, dst;

src = imread("D:\\2.jpg");

if (!src.data) {

printf("could not load image...\n");

return -1;

}

char INPUT_TITLE[] = "input image";

char OUTPUT_TITLE[] = "sobel-demo";

namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);

//namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);

imshow(INPUT_TITLE, src);

Mat gray_src;

GaussianBlur(src, dst, Size(3, 3), 0, 0);

cvtColor(dst, gray_src, CV_BGR2GRAY);

//imshow("gray image", gray_src);

Mat xgrad, ygrad;

Scharr(gray_src, xgrad, CV_16S, 1, 0);

Scharr(gray_src, ygrad, CV_16S, 0, 1);

//Sobel(gray_src, xgrad, CV_16S, 1, 0, 3);

//Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);

convertScaleAbs(xgrad, xgrad);

convertScaleAbs(ygrad, ygrad);

imshow("xgrad", xgrad);

imshow("ygrad", ygrad);

Mat xygrad = Mat(xgrad.size(), xgrad.type());

printf("type : %d\n", xgrad.type());

int width = xgrad.cols;

int height = ygrad.rows;

for (int row = 0; row < height; row++) {

for (int col = 0; col < width; col++) {

int xg = xgrad.at(row, col);

int yg = ygrad.at(row, col);

int xy = xg + yg;

xygrad.at(row, col) = saturate_cast(xy);

}

}

//addWeighted(xgrad, 0.5, ygrad, 0.5, 0, xygrad);

imshow("xygrad", xygrad);

waitKey(0);

return 0;

}

Scharr

Sobel

xgrad+ygrad

应用sobel算子算法c语言,Sobel算子详解相关推荐

  1. 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)

    国密算法Go语言实现(详解)(九) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...

  2. 国密算法Go语言实现(详解)(十) ——SM2(椭圆曲线公钥密码算法)

    国密算法Go语言实现(详解)(十) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...

  3. 应用sobel算子算法c语言,Canny算子与Sobel算子求图像边缘的C代码实现

    *Canny算子与Sobel算子求图像边缘笔记* 1.Canny求边缘算法原理简述 Canny检测边缘主要分为以下 四个算法步骤: A:噪声去除 canny算子是通过对每个像素点求一阶导数来找到梯度明 ...

  4. 九大排序算法-C语言实现及详解

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  5. c语言将AOE网络的数据写入TXT文档中,数据结构与算法学习辅导及习题详解.张乃孝版-C/C++文档类资源...

    数据结构与算法学习辅导及习题详解.张乃孝版.04年10月 经过几年的努力,我深深体会到,编写这种辅导书要比编写一本湝通教材困难得多. 但愿我的上述理想,在本书中能够得以体现. 本书的组织 本书继承了& ...

  6. EMD算法之Hilbert-Huang Transform原理详解和案例分析

    目录 Hilbert-Huang Transform 希尔伯特-黄变换 Section I 人物简介 Section II Hilbert-Huang的应用领域 Section III Hilbert ...

  7. c语言4 答案详解,2019考研数据结构C语言版详解答案(4)

    <数据结构(C语言版)>复习重点在二.三.六.七.九.十章,考试内容两大类:概念,算法,自从计算机专业课统考以后,专业课考试题型分为2类,一类选择题,一类综合应用题.本次新东方在线整理了数 ...

  8. 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序

    [排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...

  9. 【数据结构与算法】哈希算法的原理和应用详解!

    在程序员的实际开发中,哈希算法常常能用得到,本文以哈希算法的原理和应用为核心,和大家详细讲解一下哈希算法的概念.常见算法以及原理.在信息安全的应用等等. 一.概念 哈希表就是一种以 键-值(key-i ...

最新文章

  1. android WebSocket 发送图片
  2. 一个基于ngrx的计数器例子 单步调试搞清楚原理
  3. 写一个简单易用可扩展vue表单验证插件(vue-validate-easy)
  4. 第二天matplotlib绘图
  5. 【java笔记】Object类
  6. 基于php旅游网站的设计与实现
  7. 分享6款国内、国外开源PHP轻论坛CMS程序
  8. Python解析XML文档
  9. js日期加横杆_JS 替换日期的横杠为斜杠
  10. DDSM乳腺钼靶图像数据库——ftp下载与格式转换(LJPEG转PNG)
  11. 想凭勤奋逆风翻盘?如今靠运气才有更大赢面
  12. sql语句 如果为空值显示为0
  13. 笛卡尔之“我思故我在”
  14. 水滴公司更名为水滴科技集团,王慧文担任监事
  15. 【UE4】视角制作相关知识点(蓝图)
  16. 20xx绿色水墨创意学术报告PPT模版素材
  17. 河北省网上报税系统使用心得
  18. delphi 打开指定网址
  19. 多少分才能考上重庆计算机学校,中考考多少分才能在重庆上一所普通高中?
  20. 2022年9月青少年软件编程(Python) 等级考试试卷(一级)

热门文章

  1. 王者服务器维护结束2020331,S19荣耀进阶战令的星元部件是哪一位英雄的 王者荣耀2020年3月31日每日一题答案 - 找游戏手游网...
  2. 常见TCP/IP面试题(边学边补充)
  3. unity 轻型UnityWebRequest 加载
  4. 基因相关性心律失常_以色列医学研究小组发现导致心律失常的基因,正在研发相关药物...
  5. lightgbm实战-二分类问题(贝叶斯优化下调参方法)
  6. Opencv训练自己分类器
  7. 自定义微信订阅号(一、接入AI机器人篇)
  8. MegaCli 工具安装使用
  9. dataV+vue 免费大屏模板
  10. linux系统的drm配置mipi,NXP i.MX 8M Mini平台Linux系统启动时间优化