#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滤波器)的更多相关文章

  1. Sobel算子 Scharr算子 Laplacian算子

    图像梯度处理 Sobel算子 水平方向: 对于线条A和线条B,右侧像素值与左侧像素值的差值不为零,因此是边界 上下像素值差值为0,左右素值的差值不为零,分布为正负, 离的近的为2,离的远的为1 P5= ...

  2. 边缘检测:Canny算子,Sobel算子,Laplace算子

    1.canny算子 Canny边缘检测算子是John F.Canny于 1986 年开发出来的一个多级边缘检测算法.更为重要的是 Canny 创立了边缘检测计算理论(Computational the ...

  3. [OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    http://blog.csdn.net/poem_qianmo/article/details/25560901 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...

  4. 学习 opencv---(11)OpenC 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器

    本篇文章中,我们将一起学习OpenCV中边缘检测的各种算子和滤波器——Canny算子,Sobel算子,Laplace算子以及Scharr滤波器.文章中包含了五个浅墨为大家准备的详细注释的博文配套源代码 ...

  5. 【OpenCV新手教程之十二】OpenCV边缘检測:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...

  6. Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  7. 【OpenCV】边缘检测:Sobel、拉普拉斯算子

    推荐博文,博客.写得很好,给个赞. Reference Link : http://blog.csdn.net/xiaowei_cqu/article/details/7829481 一阶导数法:梯度 ...

  8. 图像边缘检测——Sobel算子

    边缘是图像最基本的特征,其在计算机视觉.图像分析等应用中起着重要的作用,这是因为图像的边缘包含了用于识别的有用信息,是图像分析和模式识别的主要特征提取手段. 1.何为“图像边缘”? 在图像中,“边缘” ...

  9. 机器学习进阶-图像梯度计算-scharr算子与laplacian算子(拉普拉斯) 1.cv2.Scharr(使用scharr算子进行计算) 2.cv2.laplician(使用拉普拉斯算子进行计算)

    1. cv2.Scharr(src,ddepth, dx, dy), 使用Scharr算子进行计算 参数说明:src表示输入的图片,ddepth表示图片的深度,通常使用-1, 这里使用cv2.CV_6 ...

  10. OpenCV笔记(2)(高斯平滑、腐蚀和膨胀、开闭运算、礼帽和黑帽、Sobel及其他算子)

    一.高斯平滑(模糊) def gaussian_blur(image): # 设置ksize来确定模糊效果 img = cv.GaussianBlur(image, (5, 5), 0) cv.ims ...

随机推荐

  1. Android - Navigation Drawer

    http://www.jianshu.com/p/c8cbeb7ea43a 用Navigation Drawer 和 Navigation View 来实现左右侧滑 Activity里甚至什么都不用写 ...

  2. php扩展php-redis安装与使用

    一.redis的安装 1,安装redis版本 下载页面:https://redis.io/download 安装一个老版本3.2.11:http://download.redis.io/release ...

  3. 关于Mysql数据库的知识总结

    2017年6月8日,天气阴.心情晴. 连续做梦两个晚上了,昨晚竟然梦见一个很长时间不联系的初中同学了,早上上班的路上聊了聊.女孩现在出差在贵州,风景秀美的地方.我说“你现在生活很滋润”.女孩说“那是你 ...

  4. HTTP协议学习随笔

    一 HTTP概述 HTTP简单说其实就是一套语言交流规则!Http使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,也能够确保数据在传输过程中不会被损坏或产生混乱. B/S结构 用户在浏览器, ...

  5. Android 状态栏开发

    又好久没写了...还是记个笔记吧.这次关于Android手机App状态栏的各种处理做一个笔记. 场景一:需要做全屏,不看到手机状态栏信息(手机电量,信号等) 这种需求一般用的比较多的地方是App的Sp ...

  6. HCTF2018 pwn题复现

    相关文件位置 https://gitee.com/hac425/blog_data/tree/master/hctf2018 the_end 程序功能为,首先 打印出 libc 的地址, 然后可以允许 ...

  7. Http 缓存机制

    HTTP 缓存体系 首先我将 Http 缓存体系分为以下三个部分: HTTP/ OK Cache-Control: no-cache Content-Type: image/png Last-Modi ...

  8. 常用的第三方模块 Pillow url

    Pillow PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用. 由于PIL仅支持到Python 2.7 ...

  9. [Java] 用 Comparator 实现排序

    最近正好用到Comparator,发现能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序算法,用起来很方便,所以简单记录一下. 本文地址:http://www.cnblogs. ...

  10. Centos 7 安装GNOME桌面环境

    第一步:列出可安装的桌面环境 [root@local ~]# yum grouplist 第二步:安装GNOME及相应桌面管理工具 [root@local ~]# yum group info &qu ...