前言

Scarry是sobel算子的特殊改进情况。当内核大小为3时,Sobel内核可能产生比较明显的误差,为了解决这一问题,Opencv提供了Scharr函数,但该函数仅作用于大小为3的内核,运行速度与Sobel函数一样,但结果却更加精确。 Scharr滤波器运算符计算x或y方向的图像差分。其实它的参数变量和Sobel基本上是一样的,只是有ksize核的大小。

Scharr算子

1.OpenCV C++ API

void Scharr(InputArray src, OutputArray dst,int ddepth ,int dx, int dy,double scale = 1,double delta = 0,int borderType=BORDER_DEFAULT)

InputArray src:输入图像。
OutputArray dst:输出图像。
int ddepth:输出图像深度。
int dx:x方向上的差分阶数。
int dy:y方向上的差分阶数。
double scale :计算导数值时可选的缩放因子,默认值1,表示默认情况下没用应用缩放。
double delta:表示在结果存入输出图像之前可选的delta值,默认值0。
int borderType:边界模式。

2.代码示例

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
void scharrEdge(cv::Mat &src, cv::Mat &dst);
int main()
{cv::Mat src = cv::imread("2.jpg");if (src.empty()){return -1;}cv::namedWindow("原图",0);cv::imshow("原图", src);cv::Mat dst =cv::Mat(src.size(), src.type());cv::Mat gray;//灰度图像cvtColor(src, gray, cv::COLOR_BGR2GRAY);scharrEdge(gray, dst);cv::namedWindow("Scharr", 0);cv::imshow("Scharr", dst);cv::waitKey(0);return 0;
}void scharrEdge(cv::Mat &src,cv::Mat &dst)
{cv::Mat scharr_x, scharr_y;//求x方向的梯度cv::Scharr(src, scharr_x, CV_16S, 1, 0, 1, 0, cv::BORDER_DEFAULT);cv::convertScaleAbs(scharr_x, scharr_x);//求y方向的梯度cv::Scharr(src, scharr_y, CV_16S, 0, 1, 1, 0, cv::BORDER_DEFAULT);cv::convertScaleAbs(scharr_y, scharr_y);//合并梯度cv::addWeighted(scharr_x, 0.5, scharr_y, 0.5, 0, dst);
}

3.运行结果

图像处理——基于OpenCV的Scharr边缘检测相关推荐

  1. 图像处理——基于OpenCV的canny边缘检测

    前言 边缘检测是处理图像里面的比较重要的一个概念,现在的边缘有传统的处理算法,也有加入深度学习的边缘检测算法,这里把我用过的几种边缘检测做个对比. canny算子 1.OpenCV canny() C ...

  2. 【图像处理】OpenCV中的边缘检测

    [图像处理]OpenCV中的边缘检测 部分参考来源 边缘检测的算子 边缘定义及类型 图像边缘描述 边缘检测算子类别 一阶微分算子:Roberts .Sobel .Prewitt 二阶微分算子:Lapl ...

  3. C/C++ OpenCV之Scharr边缘检测

    计算图像差分Scharr()函数 void Scharr( inputArray src, outputArray dst, int deepth, int dx, int dy, double sc ...

  4. c++gdal如何在大图像中截取小图像并获取其图像信息_【图像处理】OpenCV系列十 --- 边缘检测之Canny算子...

    上一篇我们学习了图像处理形态学相关知识点,相信大家学习之后已经对形态学有了足够的理解了,那么接下来,我们一起来学习一下图像处理中的边缘检测吧!我们将会重点学习边缘检测各种算子和滤波器 --- Cann ...

  5. Python+OpenCV实用案例应用教程:基于OpenCV的图像处理

    在进行图像处理时,你迟早会发现需要转换图像--一般通过应 用艺术滤镜.推断某些部分.混合两幅图像,或者任何你能够想到的 方法完成.本章将介绍一些可以转换图像的技术.最后,你还能够执 行图像锐化.标记主 ...

  6. 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测

    第7章 图像变换 7.1 基于OpenCV的边缘检测 7.1.1 边缘检测的一般步骤 1.滤波:边缘检测算法主要基于图像强度的一阶和二阶导数,导数对噪声敏感,所以要滤波 2.增强:确定图像各点邻域强度 ...

  7. 基于OpenCV的图像梯度与边缘检测!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学 严格的说,梯度计 ...

  8. 在OpenCV中基于深度学习的边缘检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出 ...

  9. 基于 opencv 的图像处理入门教程

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 146 篇文章,本文大约 5000 字,阅读大约需要 20 分钟 前言 ...

最新文章

  1. linux mkfs.ext3 参数,linux命令mkfs.ext3用法[阮胜昌]
  2. php监听网页日志,如何用php程序监听一个不断增长的日志文件
  3. [系统集成] CI持续集成项目简介
  4. python tkinter_Python编程GUI库之tkinter教程——Label篇
  5. react-redux笔记
  6. Kafka单机安装Version1.0.1(自带Zookeeper)
  7. 矩阵sum_Matlab-sum与cumsum函数
  8. 饭团(0):提升效率的开发工具
  9. 图灵机(Turing Machine)
  10. 操作手机_适合单手操作的手机,它们是王者
  11. 高德地图上覆盖物polygon方法的使用
  12. python提取国家和地区信息
  13. C语言——数组定义及使用
  14. SaaS和和PaaS的概念
  15. Hive执行Python脚本错误解决【return code 20003】
  16. VirtualBox 虚拟机里网络很慢的解决方法
  17. 机械臂正运动学(1)——MDH下的正解(自编)
  18. ntpdate提示Server dropped: no data处理记录
  19. 大数据各岗位薪资多少?一张图告诉你答案
  20. unittest入门

热门文章

  1. 2012matlab aerospace,Matlab 2012安装图解
  2. mysql创建行_如何在MySQL中创建行生成器?
  3. 语言运行泰博那契数列_波浪理论的数字基础-斐波那契数列
  4. 关闭自动更新_Win10系统关闭自动更新方法
  5. 【Linux】33. shell脚本 递归删除空目录
  6. Java数据结构和算法(五)——队列
  7. UML建模--序列图建模技巧
  8. Matlab中下标,斜体,及希腊字母的使用方法
  9. 技术分享丨关于 Hadoop 的那些事儿
  10. 聚类图像像素 Clustering Pixels Using K-Means