Opencv学习笔记(九):sobel &Laplace

来源:互联网 发布:知达常青藤中学校电话 编辑:程序博客网 时间:2024/06/07 18:06
sobel &Laplace 
Last Edit 2013/12/30
主要是简单介绍一点sobel, Laplace 操作的一点不同。

1,sobel 
   用sobel来求图像中某一点的梯度
1)水平方向                                            2)垂直方向
                     
在图像中某一点的梯度:,计算过程中利用简化形式:

void Sobel(InputArray src,  //单通道           OutputArray dst,            int ddepth, //目标图像的深度           int xorder, //x方向求导的阶数           int yorder, //y方向求导的阶数           int ksize=3,//sobel算子的大小,必须是1,3,5,7           double scale=1,            double delta=0, //在计算结果后附加的数据           int borderType=BORDER_DEFAULT )



求绝对值函数convertScaleAbs
void convertScaleAbs(InputArray src,                      OutputArray dst,                      double alpha=1,                      double beta=0)

#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include <stdlib.h>#include <stdio.h>using namespace cv;/** @function main */int main( int argc, char** argv ){Mat src, src_gray;Mat grad;char* window_name = "Sobel Demo - Simple Edge Detector";int scale = 1;int delta = 0;int ddepth = CV_16S;int c;/// Load an imagesrc = imread( argv[1] );if( !src.data ){ return -1; }GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );/// Convert it to graycvtColor( src, src_gray, CV_RGB2GRAY );/// Create windownamedWindow( window_name, CV_WINDOW_AUTOSIZE );/// Generate grad_x and grad_yMat grad_x, grad_y;Mat abs_grad_x, abs_grad_y;/// Gradient X//Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT );Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT );convertScaleAbs( grad_x, abs_grad_x );/// Gradient Y//Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT );Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT );convertScaleAbs( grad_y, abs_grad_y );/// Total Gradient (approximate)addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad );imshow( window_name, grad );waitKey(0);return 0;}

2,Laplace
求二阶导数:

void Laplacian(InputArray src,                OutputArray dst,                int ddepth,                int ksize=1,                double scale=1,                double delta=0, int borderType=BORDER_DEFAULT )
同上。




0 0
原创粉丝点击