opencv 笔记16 Imgproc_Sobel

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include 
#include 

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;

  /// 装载图像
  src = imread( argv[1] );

  if( !src.data )
  { return -1; }

  GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );

  /// 转换为灰度图
  cvtColor( src, src_gray, CV_RGB2GRAY );

  /// 创建显示窗口
  namedWindow( window_name, CV_WINDOW_AUTOSIZE );

  /// 创建 grad_x 和 grad_y 矩阵
  Mat grad_x, grad_y;
  Mat abs_grad_x, abs_grad_y;

  /// 求 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 );

  /// 求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 );

  /// 合并梯度(近似)
  addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad );

  imshow( window_name, grad );

  waitKey(0);

  return 0;
  }

void GaussianBlur(const Mat& srcMat& dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT)

Parameters:                                        
  • src – The source image
  • dst – The destination image; will have the same size and the same type as src
  • ksize – The Gaussian kernel size; ksize.width and ksize.height can differ, but they both must be positive and odd. Or, they can be zero’s, then they are computed from sigma*
  • sigmaX, sigmaY – The Gaussian kernel standard deviations in X and Y direction. If sigmaY is zero, it is set to be equal to sigmaX . If they are both zeros, they are computed from ksize.width and ksize.height , respectively, seegetGaussianKernel() . To fully control the result regardless of possible future modification of all this semantics, it is recommended to specify all of ksize , sigmaX and sigmaY
  • borderType – The pixel extrapolation method; see borderInterpolate()
void  Sobel ( const  Mat &  src Mat &  dst , int  ddepth , int  xorder , int  yorder , int  ksize=3 , double  scale=1 , double  delta=0 , int borderType=BORDER_DEFAULT )

Parameters:
  • src – The source image
  • dst – The destination image; will have the same size and the same number of channels as src
  • ddepth – The destination image depth
  • xorder – Order of the derivative x.x 方向求导的阶数
  • yorder – Order of the derivative y
  • ksize – Size of the extended Sobel kernel, must be 1, 3, 5 or 7
  • scale – The optional scale factor for the computed derivative values (by default, no scaling is applied, seegetDerivKernels() )
  • delta – The optional delta value, added to the results prior to storing them in dst
  • borderType – The pixel extrapolation method, see borderInterpolate()






你可能感兴趣的:(OpenCV)