首页 > 学院 > 开发设计 > 正文

opencv 学习之sobel算子学习

2019-11-08 20:00:32
字体:
来源:转载
供稿:网友

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} 的计算结果为

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_8Ugrad_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;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表