天天看點

膨脹腐蝕對靜态車輛檢測

場景

    前期進行了二值化處理,車輛和道路存在連通區域,實際上,就沒有必要再次進行形态學的算法處理,不過為了練習使用膨脹和腐蝕,并且了解函數的基本使用,還是進行了處理

代碼

#include "cv.h"

#include "highgui.h"

#include "opencv2/opencv.hpp"

using namespace cv;

Mat srcMat, 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;

void Erosion( int, void* );

void Dilation( int, void* );

void Erosion( int, void* )

{

  int erosion_type;

  if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; }

  else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; }

  else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }

  Mat element = getStructuringElement( erosion_type,

    Size( 2*erosion_size + 1, 2*erosion_size+1 ),

    Point( erosion_size, erosion_size ) );

  /// 腐蝕操作

  erode( srcMat, erosion_dst, element );

  imshow( "Erosion Demo", erosion_dst );

}

void Dilation( int, void* )

  int dilation_type;

  if( dilation_elem == 0 ){ dilation_type = MORPH_RECT; }

  else if( dilation_elem == 1 ){ dilation_type = MORPH_CROSS; }

  else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }

  Mat element = getStructuringElement( dilation_type,

    Size( 2*dilation_size + 1, 2*dilation_size+1 ),

    Point( dilation_size, dilation_size ) );

  ///膨脹操作

  dilate( srcMat, dilation_dst, element );

  imshow( "Dilation Demo", dilation_dst );

int main() {

  srcMat = imread( "D:/20170601092226.png" );

  if( !srcMat.data ) return -1;

  cvtColor(srcMat, srcMat, CV_BGR2GRAY);

  threshold(srcMat, srcMat, 100, 255, CV_THRESH_BINARY);

  namedWindow( "Erosion Demo", CV_WINDOW_AUTOSIZE );

  namedWindow( "Dilation Demo", CV_WINDOW_AUTOSIZE );

  cvMoveWindow( "Dilation Demo", srcMat.cols, 0 );

  /// 建立腐蝕 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,

  /// 建立膨脹 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,

  Erosion( 0, 0 );

  Dilation( 0, 0 );

  waitKey(0);

  return 0;

    本文轉自fengyuzaitu 51CTO部落格,原文連結:http://blog.51cto.com/fengyuzaitu/1893563,如需轉載請自行聯系原作者

繼續閱讀