图像处理——基于OpenCV的Scharr边缘检测
前言
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边缘检测相关推荐
- 图像处理——基于OpenCV的canny边缘检测
前言 边缘检测是处理图像里面的比较重要的一个概念,现在的边缘有传统的处理算法,也有加入深度学习的边缘检测算法,这里把我用过的几种边缘检测做个对比. canny算子 1.OpenCV canny() C ...
- 【图像处理】OpenCV中的边缘检测
[图像处理]OpenCV中的边缘检测 部分参考来源 边缘检测的算子 边缘定义及类型 图像边缘描述 边缘检测算子类别 一阶微分算子:Roberts .Sobel .Prewitt 二阶微分算子:Lapl ...
- C/C++ OpenCV之Scharr边缘检测
计算图像差分Scharr()函数 void Scharr( inputArray src, outputArray dst, int deepth, int dx, int dy, double sc ...
- c++gdal如何在大图像中截取小图像并获取其图像信息_【图像处理】OpenCV系列十 --- 边缘检测之Canny算子...
上一篇我们学习了图像处理形态学相关知识点,相信大家学习之后已经对形态学有了足够的理解了,那么接下来,我们一起来学习一下图像处理中的边缘检测吧!我们将会重点学习边缘检测各种算子和滤波器 --- Cann ...
- Python+OpenCV实用案例应用教程:基于OpenCV的图像处理
在进行图像处理时,你迟早会发现需要转换图像--一般通过应 用艺术滤镜.推断某些部分.混合两幅图像,或者任何你能够想到的 方法完成.本章将介绍一些可以转换图像的技术.最后,你还能够执 行图像锐化.标记主 ...
- 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测
第7章 图像变换 7.1 基于OpenCV的边缘检测 7.1.1 边缘检测的一般步骤 1.滤波:边缘检测算法主要基于图像强度的一阶和二阶导数,导数对噪声敏感,所以要滤波 2.增强:确定图像各点邻域强度 ...
- 基于OpenCV的图像梯度与边缘检测!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学 严格的说,梯度计 ...
- 在OpenCV中基于深度学习的边缘检测
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出 ...
- 基于 opencv 的图像处理入门教程
点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 146 篇文章,本文大约 5000 字,阅读大约需要 20 分钟 前言 ...
最新文章
- linux mkfs.ext3 参数,linux命令mkfs.ext3用法[阮胜昌]
- php监听网页日志,如何用php程序监听一个不断增长的日志文件
- [系统集成] CI持续集成项目简介
- python tkinter_Python编程GUI库之tkinter教程——Label篇
- react-redux笔记
- Kafka单机安装Version1.0.1(自带Zookeeper)
- 矩阵sum_Matlab-sum与cumsum函数
- 饭团(0):提升效率的开发工具
- 图灵机(Turing Machine)
- 操作手机_适合单手操作的手机,它们是王者
- 高德地图上覆盖物polygon方法的使用
- python提取国家和地区信息
- C语言——数组定义及使用
- SaaS和和PaaS的概念
- Hive执行Python脚本错误解决【return code 20003】
- VirtualBox 虚拟机里网络很慢的解决方法
- 机械臂正运动学(1)——MDH下的正解(自编)
- ntpdate提示Server dropped: no data处理记录
- 大数据各岗位薪资多少?一张图告诉你答案
- unittest入门