Sobel算子
Posted jack-elvis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sobel算子相关的知识,希望对你有一定的参考价值。
Sobel算子就是对图像求导,得到图像边缘梯度。
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main(int argc, char** argv) Mat src, dst; int ksize = 0; src = imread("L:/5.jpg"); if (!src.data) printf("could not load image...\\n"); return -1; char INPUT_WIN[] = "input image"; char OUTPUT_WIN[] = "sobel-demo"; namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE); namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE); imshow(INPUT_WIN, src); GaussianBlur(src, dst, Size(3, 3), 0, 0); //高斯平滑,高斯滤波 Mat gray_src; cvtColor(dst, gray_src,CV_BGR2GRAY); imshow("gray image", gray_src); Mat xgrad, ygrad; Sobel(gray_src, xgrad, CV_16S, 1, 0, 3); //X轴方向梯度 Sobel(gray_src, ygrad, CV_16S, 0, 1, 3); //Y轴方向梯度 convertScaleAbs(xgrad, xgrad); //X梯度线性变换转换输入数组元素成8位无符号整形 convertScaleAbs(ygrad, ygrad); //Y梯度线性变换转换输入数组元素成8位无符号整形 imshow("xgrad", xgrad); imshow("ygrad", ygrad); Mat xygrad; addWeighted(xgrad, 0.5, ygrad, 0.5, 0, xygrad); //X、Y梯度各占权重0.5 imshow("Final Result",xygrad); waitKey(0); return 0;
结果:
灰度图像
X轴方向梯度:
Y轴方向梯度:
0.5X+0.5Y方向:
以上是关于Sobel算子的主要内容,如果未能解决你的问题,请参考以下文章
图像边缘检测:Canny算子、Prewitt算子和sobel算子