OpenCV——边缘检测(sobel算子、Laplacian算子、scharr滤波器)



#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std; int main(int argc, char** argv)
{
Mat src = imread("test.jpg");
Mat dst, gray,grad_x, gray_y,abs_grad_x,abs_grad_y; //转成灰度图
cvtColor(src, gray, COLOR_BGR2GRAY); //均值滤波降噪,也可以用其他滤波方法
blur(gray, src, Size(, )); //运行Sobel算子,得到边缘
//求x方向梯度
Sobel(src, grad_x, CV_16S, , , );
convertScaleAbs(grad_x, abs_grad_x);//提取的深度图片进行显示时,由于是16位图片,要将图片转化成为8位图形进行显示
imshow("x方向的sobel", abs_grad_x); //运行Sobel算子,得到边缘
//求y方向梯度
Sobel(src, gray_y, CV_16S, , , );
convertScaleAbs(gray_y, abs_grad_y);
imshow("y方向的sobel", abs_grad_y); //合并梯度
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, , dst); imshow("合成的整体效果图", dst); waitKey();
return ; }
convertScaleAbs函数
线性变换转换输入数组元素成8位无符号整型。
void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0)
参数 :
src – 输入数组。
dst – 输出数组。
alpha – 可选缩放比例常数。
beta – 可选叠加到结果的常数。
对于每个输入数组的元素函数convertScaleAbs 进行三次操作依次是:缩放,得到一个绝对值,转换成无符号8位类型。
对于多通道矩阵,该函数对各通道独立处理。如果输出不是8位,将调用Mat::convertTo 方法并计算结果的绝对值。
addWeighted函数
计算两个矩阵的加权和。
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, intdtype=-1)
参数
src1 – 第一个输入数组。
alpha – 第一个数组的加权系数。
src2 – 第二个输入数组,必须和第一个数组拥有相同的大小和通道。
beta – 第二个数组的加权系数。
dst – 输出数组,和第一个数组拥有相同的大小和通道。
gamma – 对所有和的叠加的常量。
dtype – 输出数组中的可选的深度,当两个数组具有相同的深度,此系数可设为-1,意义等同于选择与第一个数组相同的深度。
在多通道情况下,每个通道是独立处理的,该函数可以被替换成一个函数表达式:
dst = src1*alpha + src2*beta + gamma;



#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std; int main(int argc, char** argv)
{
Mat src = imread("test.jpg");
Mat dst, gray; //滤波降噪
GaussianBlur(src, src, Size(, ),,,BORDER_DEFAULT); //转成灰度图
cvtColor(src, gray, COLOR_BGR2GRAY); //运行Sobel算子,得到边缘
//求x方向梯度
//Laplacian(src, dst, CV_16S, 3, 1,0,BORDER_DEFAULT);
Laplacian(src, dst, CV_16S);//后几个参数有默认值 //由于是16位图片,需要将图片转化成为8位图形进行显示
convertScaleAbs(dst, dst); imshow("效果图", dst); waitKey();
return ; }


#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std; int main(int argc, char** argv)
{
Mat src = imread("test.jpg");
Mat dst, gray,grad_x, grad_y,abs_grad_x,abs_grad_y; //转成灰度图(sobel和scharr可以不用转换成灰度图)
cvtColor(src, gray, COLOR_BGR2GRAY); //均值滤波降噪,也可以用其他滤波方法
blur(gray, src, Size(, )); //运行Sobel算子,得到边缘
//求x方向梯度
Scharr(src, grad_x, CV_16S, , );
convertScaleAbs(grad_x, abs_grad_x);//提取的深度图片进行显示时,由于是16位图片,想将图片转化成为8位图形进行显示
imshow("x方向的Scharr", abs_grad_x); //运行Sobel算子,得到边缘
//求y方向梯度
Scharr(src, grad_y, CV_16S, , );
convertScaleAbs(grad_y, abs_grad_y);
imshow("y方向的Scharr", abs_grad_y); //合并梯度
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, , dst); imshow("合成的整体效果图", dst); waitKey();
return ; }
OpenCV——边缘检测(sobel算子、Laplacian算子、scharr滤波器)的更多相关文章
- Sobel算子 Scharr算子 Laplacian算子
图像梯度处理 Sobel算子 水平方向: 对于线条A和线条B,右侧像素值与左侧像素值的差值不为零,因此是边界 上下像素值差值为0,左右素值的差值不为零,分布为正负, 离的近的为2,离的远的为1 P5= ...
- 边缘检测:Canny算子,Sobel算子,Laplace算子
1.canny算子 Canny边缘检测算子是John F.Canny于 1986 年开发出来的一个多级边缘检测算法.更为重要的是 Canny 创立了边缘检测计算理论(Computational the ...
- [OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
http://blog.csdn.net/poem_qianmo/article/details/25560901 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...
- 学习 opencv---(11)OpenC 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器
本篇文章中,我们将一起学习OpenCV中边缘检测的各种算子和滤波器——Canny算子,Sobel算子,Laplace算子以及Scharr滤波器.文章中包含了五个浅墨为大家准备的详细注释的博文配套源代码 ...
- 【OpenCV新手教程之十二】OpenCV边缘检測:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...
- Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
推荐博文,博客.写得很好,给个赞. Reference Link : http://blog.csdn.net/xiaowei_cqu/article/details/7829481 一阶导数法:梯度 ...
- 图像边缘检测——Sobel算子
边缘是图像最基本的特征,其在计算机视觉.图像分析等应用中起着重要的作用,这是因为图像的边缘包含了用于识别的有用信息,是图像分析和模式识别的主要特征提取手段. 1.何为“图像边缘”? 在图像中,“边缘” ...
- 机器学习进阶-图像梯度计算-scharr算子与laplacian算子(拉普拉斯) 1.cv2.Scharr(使用scharr算子进行计算) 2.cv2.laplician(使用拉普拉斯算子进行计算)
1. cv2.Scharr(src,ddepth, dx, dy), 使用Scharr算子进行计算 参数说明:src表示输入的图片,ddepth表示图片的深度,通常使用-1, 这里使用cv2.CV_6 ...
- OpenCV笔记(2)(高斯平滑、腐蚀和膨胀、开闭运算、礼帽和黑帽、Sobel及其他算子)
一.高斯平滑(模糊) def gaussian_blur(image): # 设置ksize来确定模糊效果 img = cv.GaussianBlur(image, (5, 5), 0) cv.ims ...
随机推荐
- php+xml有什么用
很多招聘网上找php程序员的时候都说要懂xml,这个xml+php在web网站开发方面到底有什么应用呢,希望有知道的朋友能给我具体说说,谢谢了! 我说的是在网站中的实际应用有哪些,不是网上抄的xml的 ...
- 撩课-Web大前端每天5道面试题-Day1
1. var的变量提升的底层原理是什么? JS引擎的工作方式是: 1) 先解析代码,获取所有被声明的变量: 2)然后在运行.也就是说分为预处理和执行两个阶段. 变量提升:所有变量的声明语句都会被提升到 ...
- linux新手向-文件的权限及修改
如果访问或执行一个文件显示Permission deny,一般是权限问题. 使用"ls -l"可以查看该目录下文件的详细信息. 1.读懂权限 第一列就是权限信息,形如: drwxr ...
- 【代码笔记】iOS-二维码
一,工程图. 二,代码. ViewController.m #import "ViewController.h" #import "ScanViewController. ...
- xxl-job 实现高可用
xxl-job-Admin是一个服务调度中心,管理所有的任务的触发. 1.如果xxl-job-Admin平台如果宕机了,该如何处理? 需要搭建集群. 2.xxl-job-Admin 如何搭建集群? 使 ...
- JavaSE——序列化和反序列化
序列化: 序列化对应写的操作.(读与写都是站在应用的角度上) 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间 ...
- 如何选型商业智能和分析平台,Gartner给了这些建议!
文 | 水手 在2017年1月20日Gartner发布的<China Summary Translation: 'Survey Analysis: Customers Rate Their BI ...
- 【Kibana】Kibana入门教程
一.Kibana简介及下载安装 Kibana是专门用来为ElasticSearch设计开发的,可以提供数据查询,数据可视化等功能. 下载地址为:https://www.elastic.co/downl ...
- windows 7 下安装Oracle 9i 解决方法[转]
这里首先申明下,windows7下安装oracle9i 9.0.1版本肯定是不成功的,楼主安装过无数次,网上也找过很多方法,都不可行,所以就不用试了.这里说下oracle9i 9.2版本安装出现的问题 ...
- ADB三个进阶使用
adb通过Wi-Fi连接手机 背景知识 Android系统底层运行着一个服务(adbd),也就是在手机系统内部,用于响应.管理大家在电脑端的adb命令连接,这个服务在启动时候会根据手机的配置监听USB ...