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 ...
随机推荐
- CentOS下samba配置心得(smb和nmb都要启动)
印象中以前多次配置成功过,重新配置就把以前的资料找出来: yum安装 samba samba-client samba-swat,然后配置参见:http://www.cnblogs.com/mchin ...
- 自定django登录跳转限制
django自定义一个登录跳转限制: 解释: 不登录不让跳转到其它页面. 原理: 做一个装饰器,在访问路由时,先进行判断,登录session是否存在,如果存在则跳转,不存在则返回到登录页面.或者你可以 ...
- sqli-labs(十二)(union以及select的过滤)
第二十七关: 这关禁用了空格和select,空格还是可以使用()代替,select发现可以大小写绕过 输入?id=1'||extractvalue(1,concat(0x5c,(selEct(grou ...
- Flume:sink.type=hive
Flume以Kafka为Source,以Hive为Sink进行数据转存. 业务背景:公司要求将某四川城市的卡口数据实时接入大数据平台中,历史数据可以通过Hive进行Load,也就是增量数据的对接问题. ...
- LeetCode12.整数转罗马数字
给定一个整数,将其转为罗马数字.输入确保在 1 到 3999 的范围内. 示例 1: 输入: 3 输出: "III" 示例 2: 输入: 4 输出: "IV" ...
- AngularJs ng-change事件/指令(转)
from:http://blog.csdn.net/u011127019/article/details/52564111 定义和用法 ng-change 指令用于告诉 AngularJS 在 HTM ...
- 解决sqlserver修改被阻止的提示
https://jingyan.baidu.com/article/f79b7cb3664f299144023ef8.html 工具——选项——选择designers---表设计器和数据库设计器,将阻 ...
- 关于poi导出excel方式HSSFWorkbook(xls).XSSFWorkbook(xlsx).SXSSFWorkbook.csv的总结
1.HSSFWorkbook(xls) import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermo ...
- python mmap对象
----使用内存映射的原因 为了随机访问文件的内容,使用mmap将文件映射到内存中是一个高效和优雅的方法.例如,无需打开一个文件并执行大量的seek(),read(),write()调用,只需要简单的 ...
- 20165215 2017-2018-2 《Java程序设计》第2周学习总结
20165215 2017-2018-2 <Java程序设计>第2周学习总结 教材学习内容总结 chapter2 逻辑类型boolea只能赋值true或false Java没有无符号整数类 ...