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);
}
相关文章
|
机器学习/深度学习 算法 Java
OpenCV的理解及其应用
以上只是OpenCV的冰山一角,它的功能远不止这些。如果你对计算机视觉有兴趣,我强烈推荐你去尝试使用OpenCV,相信你会在使用过程中发现更多的有趣和实用的功能。
482 8
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
390 2
|
机器学习/深度学习 存储 算法
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
582 1
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
6987 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
866 0
|
计算机视觉 Python
opencv在pycharm不能自动补全代码
opencv在pycharm不能自动补全代码
228 0
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(二)
FPGA强化(10):基于Sobel算法的边缘检测(二)
335 0
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(一)
FPGA强化(10):基于Sobel算法的边缘检测
317 0
|
移动开发 算法 计算机视觉
技术笔记:openCV特征点识别与findHomography算法过滤
技术笔记:openCV特征点识别与findHomography算法过滤
695 0