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月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
817 0
|
10月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
438 8
|
10月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
495 8
|
11月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
660 2
|
10月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
458 0
|
10月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
386 0
|
11月前
|
机器学习/深度学习 存储 算法
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
447 0
|
10月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
510 2
|
11月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
337 6
|
11月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
418 3