opencv 学习之sobel算子学习

来源:互联网 发布:商业地产it 编辑:程序博客网 时间:2024/06/08 19:10

sobel算子:

I为原图像

1.水平变化

I 与一个奇数大小的内核G_{x} 进行卷积。比如,当内核大小为3时,G_{x} 的计算结果为:

G_{x} = \begin{bmatrix}-1 & 0 & +1  \\-2 & 0 & +2  \\-1 & 0 & +1\end{bmatrix} * I

2.垂直变化:

将:math:I 与一个奇数大小的内核 G_{y} 进行卷积。比如,当内核大小为3时,G_{y} 的计算结果为

  1. G_{y} = \begin{bmatrix}-1 & -2 & -1  \\0 & 0 & 0  \\+1 & +2 & +1\end{bmatrix} * I

3.结果:

G = |G_{x}| + |G_{y}|

4.openCv提供的函数:

Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT );

该函数接受了以下参数:

  • src_gray: 在本例中为输入图像,元素类型 CV_8U
  • grad_x/grad_y: 输出图像.
  • ddepth: 输出图像的深度,设定为 CV_16S 避免外溢。
  • x_order: x 方向求导的阶数。
  • y_order: y 方向求导的阶数。
  • scale, deltaBORDER_DEFAULT: 使用默认值
我的源代码:

#include <cv.h>#include <opencv2/core/core.hpp>  #include <opencv2/imgproc/imgproc.hpp>  #include <opencv2/highgui/highgui.hpp> using namespace std;using namespace cv;int main( int argc, char** argv ){Mat image=imread("./1.jpg",CV_LOAD_IMAGE_GRAYSCALE);Mat grad_x;Mat grad_y;Mat sobel;//计算sobel滤波器的模Sobel(image,grad_x,CV_16S,1,0);Sobel(image,grad_y,CV_16S,0,1);//计算L1的模sobel=abs(grad_x)+abs(grad_y);//Mat sobel_image;//cvConvertScaleAbs函数是OpenCV中的函数,使用线性变换转换输入数组元素成8位无符号整型。convertScaleAbs(sobel,sobel_image);imshow("sobel",sobel_image);waitKey(0); return 0;}





0 0
原创粉丝点击