Image Processing2 (Eroding and Dilating)

Goal

形态学的两个基本操作

cv::erode

cv::dilate

Theory

首先对于灰度图像而言,0代表类黑色,255代表类白色。

膨胀:是一个求取结构化元素所覆盖内的局部最大值的处理,同时把它赋予锚点,因而带来图像(明亮部分)的扩张。

腐蚀:是一个求取结构化元素所覆盖内的局部最小值的处理,同时把它赋予锚点,因而带来图像(明亮部分)的腐蚀。

Code

代码是利用滑动条设置结构元素和结构元素的尺寸,添加的注释足够详细,不再解释。

/**

 * @file Morphology_1.cpp
 * @brief Erosion and Dilation sample code
 * @author OpenCV team
 */


#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;

// Global variables
Mat src, erosion_dst, dilation_dst;

int erosion_elem = 0;
int erosion_size = 0;
int dilation_elem = 0;
int dilation_size = 0;
int const max_elem = 2;
int const max_kernel_size = 21;

/** Function Headers */
void Erosion( int, void* );
void Dilation( int, void* );

/**
 * @function main
 */

int main( int argc, char** argv )
{
  // Load an image
  //命令行解析类,
  // 参数名,参数value(可以为),help信息(可以为空)

  CommandLineParser parser( argc, argv, "{@input | lena.jpg | input image}" ); //进行修改了参数位置

  src = imread( parser.get<String>( "@input" ), IMREAD_COLOR );
  if( src.empty() )
  {
    cout << "Could not open or find the image!\n" << endl;
    cout << "Usage: " << argv[0] << " <Input image>" << endl;
    return -1;
  }

  // Create windows
  namedWindow( "Erosion Demo", WINDOW_AUTOSIZE );
  namedWindow( "Dilation Demo", WINDOW_AUTOSIZE );
  moveWindow( "Dilation Demo", src.cols, 0 );//名称,新的X,新的Y

  // Create Erosion Trackbar
  //名称,窗口 ,滑动条位置,最大,回调函数

  createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo",
          &erosion_elem, max_elem,
          Erosion );

  createTrackbar( "Kernel size:\n 2n +1", "Erosion Demo",
          &erosion_size, max_kernel_size,
          Erosion );

  // Create Dilation Trackbar
  createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo",
          &dilation_elem, max_elem,
          Dilation );

  createTrackbar( "Kernel size:\n 2n +1", "Dilation Demo",
          &dilation_size, max_kernel_size,
          Dilation );

  // Default start
  Erosion( 0, 0 );
  Dilation( 0, 0 );

  waitKey(0);
  return 0;
}

CMakeLists.txt文件同上一篇相同。

运行结果如下图所示:


猜你喜欢

转载自blog.csdn.net/qq_27806947/article/details/80221940