一、概述

二、canny边缘检测

  1. #include "opencv2/opencv.hpp"
  2. using namespace cv;
  3.  
  4. void main()
  5. {
  6. //Canny边缘检测
  7. Mat srcImg = imread("E://1.png",); //0表示以灰度图读入,彩色图和灰度图进行边缘检测时略有不同,建议使用灰度图
  8. //medianBlur(srcImg, srcImg,5);//中值滤波
  9. imshow("src", srcImg);
  10.  
  11. Mat dstImg;
  12. Canny(srcImg, dstImg, , );
  13. imshow("Canny", dstImg);
  14. waitKey();
  15. }

Canny边缘检测小应用——检测工件是否平整,检测布料是否平滑

  1. #include "opencv2/opencv.hpp"
  2. using namespace cv;
  3.  
  4. Mat src,dst;
  5. int min_thres=,max_thres=;//不能直接命名为min,max,标准库std里有min和max方法
  6.  
  7. void onCanny(int,void*){
  8. Canny(src, dst,min_thres,max_thres);
  9. imshow("src",src);
  10. imshow("Canny", dst);
  11. }
  12.  
  13. void main()
  14. {
  15. src=imread("E://9.jpg",);
  16. namedWindow("Canny",CV_WINDOW_AUTOSIZE);
  17. createTrackbar("min_thres","Canny",&min_thres,,onCanny,);
  18. createTrackbar("max_thres","Canny",&max_thres,,onCanny,);
  19.  
  20. onCanny(min_thres,);//回调函数初始化
  21. onCanny(max_thres,);
  22.  
  23. waitKey();
  24. destroyAllWindows();
  25. }

注意:canny边缘检测后,图像为灰度图!

三、Sobel算子(带方向,分x,y方向)

  1. #include "opencv2/opencv.hpp"
  2. using namespace cv;
  3.  
  4. void main()
  5. {
  6. Mat grad_x, grad_y;
  7. Mat abs_grad_x, abs_grad_y, dst;
  8.  
  9. Mat src = imread("E://5.jpg", );
  10. imshow("src", src);
  11.  
  12. Sobel(src, grad_x, CV_16S, , , );//16位有符号(求导时有正负),x方向参数设置为1,0
  13. convertScaleAbs(grad_x, abs_grad_x);//转为无符号
  14. imshow("X方向", abs_grad_x);
  15.  
  16. Sobel(src, grad_y, CV_16S, , , );//y方向参数设置为0,1
  17. convertScaleAbs(grad_y, abs_grad_y);
  18. imshow("Y方向", abs_grad_y);
  19.  
  20. addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, , dst);
  21. imshow("合并效果", dst);
  22.  
  23. waitKey();
  24. destroyAllWindows();
  25. }

四、Laplacian算子(二阶,带方向)

  1. #include "opencv2/opencv.hpp"
  2. using namespace cv;
  3.  
  4. void main()
  5. {
  6. Mat src,dst,abs_dst;
  7. src = imread("E://lena.jpg", );
  8. imshow("src", src);
  9.  
  10. Laplacian(src, dst, CV_16S, );
  11. convertScaleAbs(dst, abs_dst);
  12. imshow("Laplacian", abs_dst);
  13.  
  14. waitKey();
  15. destroyAllWindows();
  16. }

五、其他

Z1  Z2  Z3
 Z4  Z5  Z6
 Z7  Z8  Z9

Robets交叉梯度算子:▽f≈|Z9-Z5|+|Z8-Z6|

Prewitt梯度算子:▽f≈|(Z7+Z8+Z9)-(Z1+Z2+Z3)|+|(Z3+Z6+Z9)-(Z1+Z4+Z7)|

Sobel梯度算子:▽f≈|(Z7+Z8+Z9)-(Z1+Z2+Z3)|+|(Z3+Z6+Z9)-(Z1+Z4+Z7)|

opencv学习之路(17)、边缘检测的更多相关文章

  1. OpenCV学习代码记录——canny边缘检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  2. opencv学习之路(18)、霍夫变换

    一.简介 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在.在许多应用场合中需要快速准确地检测出直线或者圆.其中一种非常有效的解决问题的方法是霍夫(Hough) ...

  3. opencv学习之路(5)、鼠标和滑动条操作

    一.鼠标事件 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespa ...

  4. opencv学习之路(2)、读取视频,读取摄像头

    一.介绍 视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的.1秒24帧基本就能流畅的读取视频了. ①读取视频有两种方法: A. VideoCapture cap; cap.open(“1.a ...

  5. Opencv学习笔记3:边缘检测算子的实现方法

    一.边缘检测概念 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘.效果如图: 接下来介绍一下边缘提取的几种算子,具体证明过程 ...

  6. OpenCV 学习之路(2) -- 操作像素

    本节内容: 访问像素值 用指针扫描图像 用迭代器扫描图像 编写高效的图像扫描循环 扫描图像并访问相邻像素 实现简单的图像运算 图像重映射 访问像素值 准备工作: 创建一个简单函数,用它在图像中加入椒盐 ...

  7. Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练

    在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资 ...

  8. OpenCV学习笔记(11)——Canny边缘检测

    了解Canny边缘检测的概念 1.原理 Canny边缘检测是一种非常流行的边缘检测算法,是 John F.Canny在1986年提出的.它是一个有很多步构成的算法 1)噪声去除 使用5*5的高斯滤波器 ...

  9. OpenCV 学习之路(1)

    OpenCV的第一个代码: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #i ...

随机推荐

  1. shiro loginUrl拦截无效

    logUrl不拦截 或者 只跳转到/login.jsp 不跳到自己设置登录链接 在springmvc或事务那里 开启spring的显示代理(即cglib),并将shiro的安全管理器交给spring管 ...

  2. 如何遍历tabcontrol控件的所有的tabpage中的所有控件

    foreach(Control c in tabControl1.TabPages)这个循环的意思是说,遍历tabControl1中所有的TabPages,TabPages是包含在tabControl ...

  3. Vue系列之 => 钩子函数生命周期

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. hdu5125 树状数组+dp

     hdu5125 他说的是n个人每个人都有两个气球a,b,气球各自都有相应的体积,现在让他们按照序号排列好来,对他们的a气球体积值计算最长上升子序列,对于这整个排列来说有m次机会让你将a气球替换成b气 ...

  5. JavaScript--函数、匿名函数和自执行函数详解

       函数的声明及调用 1.函数的声明格式:        function 函数名([参数1],[参数2],.....){          //函数体代码          [return 返回值 ...

  6. DataBase(28)

    1.数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立.使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完 ...

  7. C# CheckBox与RadioButton

    通常RadioBox称为单选按钮,CheckBox称为多选按钮,这两个控件都是从ButtonBase类中派生,可以将其视为按钮. 多个checkBox之间的选择是互相独立的,互补影响.多个RadioB ...

  8. Linux基础命令---验证组文件grpck

    grpck grpck指令可以验证组文件“/etc/group”和“/etc/gshadow”的完整性.检查的内容包括:正确的字段数.唯一有效的组名称.有效的组标识符.成员和管理员的有效列表.“/et ...

  9. Linux基础命令---添加用户useradd

    useradd 创建新的系统用户,useradd指令只能以管理员的身份运行,创建的用户都在“/etc/passwd”文件中.当不加-D参数,useradd指令使用命令列来指定新帐号的设定值and使用系 ...

  10. CentOS7使用yum命令安装Java1.8

    CentOS7使用yum命令安装Java1.8 首先更新已安装的包:#yum update查看系统当前的java版本:#java -version==================== CentOS ...