sobel算子:
I为原图像
1.水平变化
将 与一个奇数大小的内核
进行卷积。比如,当内核大小为3时,
的计算结果为:
2.垂直变化:
将:math:I 与一个奇数大小的内核 进行卷积。比如,当内核大小为3时,
的计算结果为
3.结果:
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, delta 和 BORDER_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;}
新闻热点
疑难解答