一、概述

二、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)、边缘检测的更多相关文章

  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. 前端获取的数据是undefined

    var id = $("id1").val(); var username = $("username1").val(); var password = $(& ...

  2. <7>Lua类的表的实例创建

    根据上一节知识所述Lua中没有像C.C++.JAVA中的类概念,面向对象等 ,但我们可以模拟出来 如下 代码如下: --创建类的表 local Person = {} function Person: ...

  3. WebStorage (1) 实例

    实例代码 <p>本页面每5秒刷新一下,这是您第<mark></mark>次进入本页面!</p> <script> if (window.lo ...

  4. GeoJSON 和 TopoJSON

    GeoJSON 和 TopoJSON 是符合 JSON 语法规则的两种数据格式,用于表示地理信息. 1. GeoJSON GeoJSON 是用于描述地理空间信息的数据格式.GeoJSON 不是一种新的 ...

  5. 从windows本地IDE启动远程Linux文件进行调试

    1)  因为WingIDE调用putty和plink进行ssh连接,需要先设置putty. 点击下载putty,并解压,把解压路径附到操作系统PATH环境变量中,之后重新启动WingIDE,让它重新读 ...

  6. numpy元素级数组函数

    一元函数 abs, fabs 计算整数.浮点数或复数的绝对值.对于非复数值,可以使用更快的fabs. sqrt 计算各元素的平方根.相当于arr ** 0.5 sqare 计算各元素的平方.相当于ar ...

  7. Presto上使用SQL遇到的一些坑

    本文转载自:https://segmentfault.com/a/1190000013120454?utm_source=tag-newest 最近换了新工作,在数据处理方面,公司是用Presto连接 ...

  8. Linux基础命令---arping

    arping arping指令用于发送arp请求到一个相邻的主机,在指定网卡上发送arp请求指定地址,源地址使用-s指定.该指令可以直径ping MAC地址,找出哪些地址被哪些电脑使用了. 此命令的适 ...

  9. Linux基础命令---文本过滤colrm

    colrm 从标准输入读取数据,删除指定的列,然后送到标准输出.如果用一个参数调用,则将从指定的列开始删除每一行的列.如果使用两个参数调用,则将删除从第一列到最后一列的列.列编号以第1列开始. 此命令 ...

  10. [转载]Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下, ...