Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.91 KB | None | 0 0
  1. uchar vals[9] = {0, 1, 0,
  2.                  1, 1, 1,
  3.                  0, 1, 0}
  4. Mat defElStruct(3,3,CV_8UC1, vals);
  5.  
  6.  
  7. Mat dilate(Mat src, Mat strEl = defElStruct) {
  8.     int h = strEl.rows/2;
  9.     int w = strEl.cols/2;
  10.  
  11.     Mat dst = src.clone();
  12.     for (int i=h; i< src.rows-h; i++)
  13.         for(int j=w; j < src.cols-w; j++)
  14.             if(src.at<uchar>(i,j) == 0)
  15.                 for(int ii=-h; ii< h; ii++) //iterate through the structural element
  16.                     for(int jj=-w; jj<w; jj++)
  17.                         if (strEl.at<uchar>(ii+h, jj+w) == 1)
  18.                             dst.at<uchar>(i+ii, j+jj) = 0;
  19.     return dst;
  20. }
  21.  
  22. Mat erode(Mat src, Mat strEl = defElStruct) {
  23.     int h = strEl.rows/2;
  24.     int w = strEl.cols/2;
  25.  
  26.     bool k;
  27.  
  28.     Mat dst = src.clone();
  29.     for (int i=h; i< src.rows-h; i++)
  30.         for(int j=w; j < src.cols-w; j++)
  31.             if(src.at<uchar>(i,j) == 0)
  32.             {
  33.                 k = false;
  34.                 for(int ii=-h; ii< h; ii++) //iterate through the structural element
  35.                 {
  36.                     for(int jj=-w; jj<w; jj++)
  37.                         if (strEl.at<uchar>(ii+h, jj+w) == 1 && src.at<uchar>(i+ii, j+jj) == 255)
  38.                         {
  39.                             dst.at<uchar>(i, j) = 255;
  40.                             k = true;
  41.                             break;
  42.                         }
  43.                     if (k) break;
  44.                 }
  45.             }
  46.     return dst;
  47. }
  48.  
  49. void opening(Mat img, Mat strEl = defElStruct) {
  50.     Mat res = erode(img, strEl);
  51.     res = dilate(res, strEl);
  52.     return res;
  53. }
  54.  
  55. void closing(Mat img, Mat strEl = defElStruct) {
  56.     Mat res = erode(img, strEl);
  57.     res = dilate(res, strEl);
  58.     return res;
  59. }
  60.  
  61. void dilationTest() {
  62.     int n;
  63.     std::cout << "Number of dilations: ";
  64.     std::cin >> n;
  65.  
  66.     char fname[MAX_PATH];
  67.  
  68.     while(openFileDlg(fname)) {
  69.         Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  70.         Mat res = src.clone();
  71.         for(int i=0;i<n;i++) {
  72.             res = dilate(res);
  73.             std::cout<< "Iteration " << i+1 << '\n';
  74.             imshow("original", src);
  75.             imshow("result", res);
  76.             waitKey();
  77.         }
  78.     }
  79. }
  80.  
  81. void erosionTest() {
  82.     int n;
  83.     std::cout << "Number of erosions: ";
  84.     std::cin >> n;
  85.  
  86.     char fname[MAX_PATH];
  87.  
  88.     while(openFileDlg(fname)) {
  89.         Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  90.         Mat res = src.clone();
  91.         for(int i=0;i<n;i++) {
  92.             res = erode(res);
  93.             std::cout<< "Iteration " << i+1 << '\n';
  94.             imshow("original", src);
  95.             imshow("result", res);
  96.             waitKey();
  97.         }
  98.     }
  99. }
  100.  
  101. void openingTest() {
  102.     char fname[MAX_PATH];
  103.     while(openFileDlg(fname)) {
  104.         Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  105.         Mat res = opening(src);
  106.         imshow("original", src);
  107.         imshow("after opening", res);
  108.     }
  109. }
  110.  
  111. void closingTest() {
  112.     char fname[MAX_PATH];
  113.     while(openFileDlg(fname)) {
  114.         Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  115.         Mat res = closing(src);
  116.         imshow("original", src);
  117.         imshow("after opening", res);
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement