Sobel一阶导数

  Sobel操作符是一个离散的微分算子。它计算了图像强度函数的梯度,结合了高斯平滑和微分。

  函数Sobel() 检测水平变化、检测垂直变化


  函数Scharr() 比传统Sobel函数运算快而且更为准确。


代码示例

#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{CommandLineParser parser(argc, argv,            // 命令行解析类,减少命令行使用过程中的工作量"{@input  | ../data/lena.jpg|input image}""{ksize k | 1 |hit 'K' to increase value}""{scale s | 1 |hit 'S' to increase value}""{delta d | 0 |hit 'D' to increase value}""{help  h | false |show help message}");cout << "The sample uses Sobel or Scharr OpenCV functions for edge detection\n\n";parser.printMessage();cout << "\nPress 'ESC' to exit program.\n""Press 'R' to reset values ( ksize will be -1 equal to Scharr function )";Mat image, src, src_gray, grad;String window_name = "Sobel Demo";int ksize = parser.get<int>("ksize");int scale = parser.get<int>("scale");int delta = parser.get<int>("delta");int ddepth = CV_16S;String imageName = parser.get<String>("@input");    // 获取图像路径和图像名           image = imread(imageName, IMREAD_COLOR);if (image.empty()) { return -1; }while (1){GaussianBlur(image, src, Size(3, 3), 0, 0, BORDER_DEFAULT);     // 高斯模糊cvtColor(src, src_gray, COLOR_BGR2GRAY);                        // 转换灰度图像Mat grad_x, grad_y, abs_grad_x, abs_grad_y;Sobel(src_gray, grad_x, ddepth, 1, 0, ksize, scale, delta, BORDER_DEFAULT);Sobel(src_gray, grad_y, ddepth, 0, 1, ksize, scale, delta, BORDER_DEFAULT);convertScaleAbs(grad_x, abs_grad_x);            // 缩放,计算绝对值,并将结果转换为8位convertScaleAbs(grad_y, abs_grad_y);addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);imshow(window_name, grad);char key = (char)waitKey(0);if (key == 27){return 0;}if (key == 'k' || key == 'K'){ksize = ksize < 30 ? ksize + 2 : -1;}if (key == 's' || key == 'S'){scale++;}if (key == 'd' || key == 'D'){delta++;}if (key == 'r' || key == 'R'){scale = 1;ksize = -1;delta = 0;}}return 0;
}

运行结果


拉普拉斯二阶导数

代码示例

#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"using namespace cv;int main(int argc, char** argv)
{Mat src, src_gray, dst;int kernel_size = 3;int scale = 1;int delta = 0;int ddepth = CV_16S;char* window_name = "Laplace Demo";char* imageName = "../data/lena.jpg";src = imread(imageName, IMREAD_COLOR);if (src.empty()) { return -1; }GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);       // 高斯模糊cvtColor(src, src_gray, COLOR_BGR2GRAY);                        // 转换灰度图像Mat abs_dst;                                                    // 拉普拉斯二阶导数Laplacian(src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT);convertScaleAbs(dst, abs_dst);                                  // 绝对值8位imshow(window_name, abs_dst);waitKey(0);return 0;
}

运行结果


Canny

优点:

  Low error rate: Meaning a good detection of only existent edges.

  Good localization: The distance between edge pixels detected and real edge pixels have to be minimized.

  Minimal response: Only one detector response per edge.


代码示例

#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"using namespace cv;Mat src, src_gray, dst, detected_edges;int lowThreshold = 1;
int max_lowThreshold = 100;
int ratio = 3;
int kernel_size = 3;
char* window_name = "Canny Demo";void CannyThreshold(int, void*)
{blur(src_gray, detected_edges, Size(3, 3));     // 平均滤波平滑Canny(detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size);dst = Scalar::all(0);src.copyTo(dst, detected_edges);imshow(window_name, dst);
}int main(int, char** argv)
{char* filename = "../data/lena.jpg";src = imread(filename, IMREAD_COLOR);if (src.empty()) { return -1;}dst.create(src.size(), src.type());cvtColor(src, src_gray, COLOR_BGR2GRAY);namedWindow(window_name, WINDOW_AUTOSIZE);createTrackbar("Min Threshold", window_name, &lowThreshold, max_lowThreshold, CannyThreshold);CannyThreshold(0, 0);waitKey(0);return 0;
}

运行结果


【OpenCV】边缘检测相关推荐

  1. 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...

  2. OpenCV学习-P34-P38 Opencv边缘检测

    OpenCV学习-P34-P37 Opencv边缘检测 Sobel检测算子 Laplacian检测算子 Canny边缘检测算法 边缘检测总结 边缘检测分为两类:基于搜索和基于零穿越 基于搜索:寻找图像 ...

  3. Opencv边缘检测、轮廓发现、绘制轮廓

    Opencv边缘检测.轮廓发现.绘制轮廓 提取图像轮廓的2个步骤 1. findContours函数找轮廓, 2. drawContours函数画轮廓 轮廓的查找--cv::findContours( ...

  4. python opencv 边缘检测_opencv-python-学习笔记十四(Canny边缘检测)

    原理 Canny边缘检测是一种常用的边缘检测算法.由 John F. Canny提出 这是一个多阶段的算法,我们将经历每个阶段. 1.降低噪音 由于边缘检测容易受到图像中噪声的影响,第一步是用5x5高 ...

  5. opencv:边缘检测之Laplacian算子思想及实现

    Laplacian算子边缘检测的来源 在边缘部分求取一阶导数,你会看到极值的出现: 如果在边缘部分求二阶导数会出现什么情况? 从上例中我们可以推论检测边缘可以通过定位梯度值大于邻域的相素的方法找到(或 ...

  6. 【学习OpenCV4】OpenCV边缘检测算法总结

    本文分享内容来自图书<学习OpenCV 4:基于Python的算法实战>,该书内容如下: 第1章 OpenCV快速入门: 第2章 图像读写模块imgcodecs: 第3章 核心库模块cor ...

  7. opencv——边缘检测算法(总结)

    前言 笔记. 一.边缘检测算法 边缘检测算法是指利用灰度值的不连续性质,以灰度突变为基础分割出目标区域.对铝铸件表面进行成像后会产生一些带缺陷的区域,这些区域的灰度值比较低,与背景图像相比在灰度上会有 ...

  8. python opencv边缘检测

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

  9. OpenCV 边缘检测

    一. 实验内容 用OpenCV对图片进行边缘检测. 二. 实验代码 //边缘检测 class Task17 { public:void deal() {Mat src_img = imread(&qu ...

  10. opencv边缘检测算子

    实验三 边缘检测算子 一. 实验目的 利用opencv或其他工具编写实现下图的sobel算子和robert算子边缘检测 二. 实验过程 利用opencv python实现sobel算子和robert算 ...

最新文章

  1. Web.config配置文件详解(新手必看)
  2. 2015第27周一非结构化数据
  3. Viewpager的创建和使用——————————不懂的大家可以问,欢迎提问
  4. windows 2008 下C#调用office组件访问拒绝的解决方法(failed due to the following error: 80070005 拒绝访问)...
  5. T-SQL LIKE子句 模糊查询
  6. latex表格名的引用问题
  7. c++实现KMP算法中的Next[ ]
  8. 数值计算方法(一)——插值
  9. 中兴天机Axon 10 Pro安兔兔跑分曝光:刷新记录!
  10. Linux 常用C函数说明-文件权限控制篇
  11. windows系统查看80端口被占用的程序并结束该程序运行
  12. 允许外部访问Windows本机的指定端口
  13. eclipse汉化包安装步骤
  14. 在word中如何设置稿纸和字帖?学会帮你省下字帖钱哟!
  15. LEGION联想Y7000P Ubuntu18.04的无线网卡驱动安装
  16. uni-app 更改头部导航条背景,改成背景图
  17. 交集选择器与并集选择器
  18. 微信小程序自定义switch中带文字效果
  19. helm模板开发-流程控制、作用域、循环、变量(三)
  20. mx450属于什么档次的显卡

热门文章

  1. tensorflow sigmoid 如何计算训练数据的正确率_“来自蒙娜丽莎的凝视”— 结合 TensorFlow.js 和深度学习实现...
  2. python多进程map比apply快_python 多进程读写 map
  3. Silver Cow Party 图论 最短路问题
  4. 牛客 2021年度训练联盟热身训练赛第二场 A题
  5. 如何使用Windows、Ubuntu甚至手机登录远程计算机
  6. 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件
  7. c/c++教程 - 1.5 运算符
  8. 剑指offer——29.顺时针打印矩阵(不熟)
  9. Git Pull Failed:Could not read from remote repository
  10. 千万别被“读书无用”给害了