OpenCV 边缘检测之Canny算法(代码应用)

简介: OpenCV 边缘检测之Canny算法(代码应用)

Canny算法


Canny是边缘检测算法,在1986年提出的。


是一个很好的边缘检测器


很常用也很实用的图像处理方法


Canny算法步骤


  1. 消除噪声:高斯模糊 - GaussianBlur


  1. 灰度转换 - cvtColor


  1. 计算梯度 – Sobel/Scharr


  1. 非最大信号抑制


  1. 高低阈值输出二值图像


API


函数原型及参数


Canny(
InputArray src, // 8-bit的输入图像
OutputArray edges,// 输出边缘图像, 一般都是二值图像,背景是黑色
double threshold1,// 低阈值,常取高阈值的1/2或者1/3
double threshold2,// 高阈值
int aptertureSize,// Soble算子的size,通常3x3,取值3
bool L2gradient // 选择 true表示是L2来归一化,否则用L1归一化


代码案例:




#include<iostream>
#include<math.h>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>  
using namespace std;
using namespace cv;
void Canny_demo(int, void*);
Mat src, gray_src;
int max_range = 255;
int min_threshold = 20;
int main()
{
  // 读取图片
  src = imread("./test2.jpg");
  if (!src.data)
  {
    cout << "Could not load the image ...." << endl;
    return -1;
  }
  namedWindow("input_image", CV_WINDOW_AUTOSIZE);
  imshow("input_image", src);
  // 换为灰度图
  cvtColor(src, gray_src, CV_BGR2GRAY);
  imshow("gray_iamge", gray_src);
  // 使用trackbar调整阈值
  namedWindow("Output_window", CV_WINDOW_AUTOSIZE);
  createTrackbar("Canny_Tracker", "Output_window", &min_threshold, max_range, Canny_demo);
  Canny_demo(0, 0);
  waitKey(0);
  return 0;
}
void Canny_demo(int, void *)
{
  Mat tmp_src, edge_output, dst;
  // 均值滤波
  blur(gray_src, tmp_src, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
  Canny(tmp_src, edge_output, min_threshold, min_threshold * 2, 3, false);
  imshow("canny_image", edge_output);   // 显示Canny二值化的图
  Mat tmp_src2(src);
  dst.create(src.size(), src.type());
  tmp_src2.copyTo(dst, edge_output);    // 将边缘与原图片重叠显示
  imshow("Output_window", dst);
}
相关文章
|
10月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
421 8
|
10月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
473 8
|
10月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
802 0
|
10月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
450 0
|
10月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
370 0
|
11月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
645 2
|
11月前
|
机器学习/深度学习 存储 算法
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
439 0
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
4658 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
389 4