opencv学习之路(17)、边缘检测
一、概述
二、canny边缘检测
- #include "opencv2/opencv.hpp"
- using namespace cv;
- void main()
- {
- //Canny边缘检测
- Mat srcImg = imread("E://1.png",); //0表示以灰度图读入,彩色图和灰度图进行边缘检测时略有不同,建议使用灰度图
- //medianBlur(srcImg, srcImg,5);//中值滤波
- imshow("src", srcImg);
- Mat dstImg;
- Canny(srcImg, dstImg, , );
- imshow("Canny", dstImg);
- waitKey();
- }
Canny边缘检测小应用——检测工件是否平整,检测布料是否平滑
- #include "opencv2/opencv.hpp"
- using namespace cv;
- Mat src,dst;
- int min_thres=,max_thres=;//不能直接命名为min,max,标准库std里有min和max方法
- void onCanny(int,void*){
- Canny(src, dst,min_thres,max_thres);
- imshow("src",src);
- imshow("Canny", dst);
- }
- void main()
- {
- src=imread("E://9.jpg",);
- namedWindow("Canny",CV_WINDOW_AUTOSIZE);
- createTrackbar("min_thres","Canny",&min_thres,,onCanny,);
- createTrackbar("max_thres","Canny",&max_thres,,onCanny,);
- onCanny(min_thres,);//回调函数初始化
- onCanny(max_thres,);
- waitKey();
- destroyAllWindows();
- }
注意:canny边缘检测后,图像为灰度图!
三、Sobel算子(带方向,分x,y方向)
- #include "opencv2/opencv.hpp"
- using namespace cv;
- void main()
- {
- Mat grad_x, grad_y;
- Mat abs_grad_x, abs_grad_y, dst;
- Mat src = imread("E://5.jpg", );
- imshow("src", src);
- Sobel(src, grad_x, CV_16S, , , );//16位有符号(求导时有正负),x方向参数设置为1,0
- convertScaleAbs(grad_x, abs_grad_x);//转为无符号
- imshow("X方向", abs_grad_x);
- Sobel(src, grad_y, CV_16S, , , );//y方向参数设置为0,1
- convertScaleAbs(grad_y, abs_grad_y);
- imshow("Y方向", abs_grad_y);
- addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, , dst);
- imshow("合并效果", dst);
- waitKey();
- destroyAllWindows();
- }
四、Laplacian算子(二阶,带方向)
- #include "opencv2/opencv.hpp"
- using namespace cv;
- void main()
- {
- Mat src,dst,abs_dst;
- src = imread("E://lena.jpg", );
- imshow("src", src);
- Laplacian(src, dst, CV_16S, );
- convertScaleAbs(dst, abs_dst);
- imshow("Laplacian", abs_dst);
- waitKey();
- destroyAllWindows();
- }
五、其他
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)、边缘检测的更多相关文章
- OpenCV学习代码记录——canny边缘检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- opencv学习之路(18)、霍夫变换
一.简介 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在.在许多应用场合中需要快速准确地检测出直线或者圆.其中一种非常有效的解决问题的方法是霍夫(Hough) ...
- opencv学习之路(5)、鼠标和滑动条操作
一.鼠标事件 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespa ...
- opencv学习之路(2)、读取视频,读取摄像头
一.介绍 视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的.1秒24帧基本就能流畅的读取视频了. ①读取视频有两种方法: A. VideoCapture cap; cap.open(“1.a ...
- Opencv学习笔记3:边缘检测算子的实现方法
一.边缘检测概念 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘.效果如图: 接下来介绍一下边缘提取的几种算子,具体证明过程 ...
- OpenCV 学习之路(2) -- 操作像素
本节内容: 访问像素值 用指针扫描图像 用迭代器扫描图像 编写高效的图像扫描循环 扫描图像并访问相邻像素 实现简单的图像运算 图像重映射 访问像素值 准备工作: 创建一个简单函数,用它在图像中加入椒盐 ...
- Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练
在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资 ...
- OpenCV学习笔记(11)——Canny边缘检测
了解Canny边缘检测的概念 1.原理 Canny边缘检测是一种非常流行的边缘检测算法,是 John F.Canny在1986年提出的.它是一个有很多步构成的算法 1)噪声去除 使用5*5的高斯滤波器 ...
- OpenCV 学习之路(1)
OpenCV的第一个代码: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #i ...
随机推荐
- shiro loginUrl拦截无效
logUrl不拦截 或者 只跳转到/login.jsp 不跳到自己设置登录链接 在springmvc或事务那里 开启spring的显示代理(即cglib),并将shiro的安全管理器交给spring管 ...
- 如何遍历tabcontrol控件的所有的tabpage中的所有控件
foreach(Control c in tabControl1.TabPages)这个循环的意思是说,遍历tabControl1中所有的TabPages,TabPages是包含在tabControl ...
- Vue系列之 => 钩子函数生命周期
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- hdu5125 树状数组+dp
hdu5125 他说的是n个人每个人都有两个气球a,b,气球各自都有相应的体积,现在让他们按照序号排列好来,对他们的a气球体积值计算最长上升子序列,对于这整个排列来说有m次机会让你将a气球替换成b气 ...
- JavaScript--函数、匿名函数和自执行函数详解
函数的声明及调用 1.函数的声明格式: function 函数名([参数1],[参数2],.....){ //函数体代码 [return 返回值 ...
- DataBase(28)
1.数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立.使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完 ...
- C# CheckBox与RadioButton
通常RadioBox称为单选按钮,CheckBox称为多选按钮,这两个控件都是从ButtonBase类中派生,可以将其视为按钮. 多个checkBox之间的选择是互相独立的,互补影响.多个RadioB ...
- Linux基础命令---验证组文件grpck
grpck grpck指令可以验证组文件“/etc/group”和“/etc/gshadow”的完整性.检查的内容包括:正确的字段数.唯一有效的组名称.有效的组标识符.成员和管理员的有效列表.“/et ...
- Linux基础命令---添加用户useradd
useradd 创建新的系统用户,useradd指令只能以管理员的身份运行,创建的用户都在“/etc/passwd”文件中.当不加-D参数,useradd指令使用命令列来指定新帐号的设定值and使用系 ...
- CentOS7使用yum命令安装Java1.8
CentOS7使用yum命令安装Java1.8 首先更新已安装的包:#yum update查看系统当前的java版本:#java -version==================== CentOS ...