Sobel算子可用于计算图像梯度。
1.水平方向上: 2. 竖直方向上:
3.计算梯度 4.通常梯度近似为
在3*3卷积核下,Scharr具有速度快、精度高的优点:
#include "cv.h"
#include "highgui.h"
using namespace cv;
using namespace std;
int main(int argc,char *argv[])
{
Mat src,srcGray,grad_x,grad_y,grad_x_abs,grad_y_abs,dst;
src=imread("fish.jpg");
GaussianBlur(src,src,Size(3,3),0,0,BORDER_DEFAULT);
cvtColor(src,srcGray,CV_BGR2GRAY);
imshow("srcGray",srcGray);
Sobel(srcGray,grad_x,CV_16S,1,0,3,1,0,BORDER_DEFAULT);
convertScaleAbs(grad_x,grad_x_abs);
Sobel(srcGray,grad_y,CV_16S,0,1,3,1,0,BORDER_DEFAULT);
convertScaleAbs(grad_y,grad_y_abs);
addWeighted(grad_x_abs,0.5,grad_y_abs,0.5,0,dst);
imshow("dst",dst);
cvWaitKey(0);
destroyAllWindows();
return 0;
}
重要函数介绍
Scharr用法与Sobel一样:
// Gradient X
Scharr(srcGray,grad_x,CV_16S,1,0,3,1,0,BORDER_DEFAULT);
// Gradient Y
Scharr( srcGray,grad_x,CV_16S,1,0,3,1,0,BORDER_DEFAULT );
拉普拉斯算子
#include "cv.h"
#include "highgui.h"
using namespace cv;
using namespace std;
int main(int argc,char *argv[])
{
Mat src,srcGray,dst,dst_abs;
src=imread("fish.jpg");
GaussianBlur(src,src,Size(3,3),0,0,BORDER_DEFAULT);
cvtColor(src,srcGray,CV_BGR2GRAY);
imshow("srcGray",srcGray);
Laplacian(srcGray,dst,CV_16S,3,1,0,BORDER_DEFAULT);
convertScaleAbs(dst,dst_abs);
imshow("dst_abs",dst_abs);
cvWaitKey(0);
destroyAllWindows();
return 0;
}
重要函数: