Advertisement
Guest User

ExtendCanny

a guest
May 21st, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. Mat extendEdge(Mat src, int neighbours) {
  2.     int height = src.rows, width = src.cols;
  3.     Mat dst = src.clone();
  4.     int di[8] = { -1, 0, 1, 0, -1, -1, 1, 1 };
  5.     int dj[8] = { 0, -1, 0, 1, -1, 1, -1, 1 };
  6.     //int di[16] = { -1, 0, 1, 0, -1, -1, 1, 1,   -2, 0, 2, 0, -2, 2, 2, -2 };
  7.     //int dj[16] = { 0, -1, 0, 1, -1, 1, -1, 1,   0, -2, 0, 2, -2, -2, 2, 2 };
  8.     //Parcurgere pentru creare muchii tari
  9.     Mat visited = Mat::zeros(height, width, CV_8UC1);
  10.     for (int i = 0; i < height; i++) {
  11.         for (int j = 0; j < width; j++) {
  12.             uchar pixel = src.at<uchar>(i, j);
  13.             if (pixel == 255) {
  14.                 std::queue<Point2i> Q;
  15.                 Q.push(Point2i(i, j));
  16.                 while (!Q.empty()) {
  17.                     Point2i point = Q.front();  //Luam primul element din coada, fara a-l sterge
  18.                     Q.pop();    //Stergem primul element din coada
  19.                     //Parcurgem vecinii
  20.                     for (int k = 0; k < 16; k++) {
  21.                         int x = point.x + di[k],
  22.                             y = point.y + dj[k];
  23.                         if (x > 0 && x < height && y > 0 && y < width) {
  24.                             if (src.at<uchar>(x, y) == 128 && visited.at<uchar>(x, y) == 0) {
  25.                                 dst.at<uchar>(x, y) = 255;
  26.                                 visited.at<uchar>(x, y) = 1;
  27.                                 Q.push(Point2i(x, y));  //Adaugam vecinii in coada
  28.                             }
  29.                         }
  30.                     }
  31.                 }
  32.             }
  33.         }
  34.     }
  35.     //Parcurgere pentru eliminarea muchiilor slabe ramase
  36.     for (int i = 0; i < height; i++) {
  37.         for (int j = 0; j < width; j++) {
  38.             uchar pixel = dst.at<uchar>(i, j);
  39.             if (pixel == 128)
  40.                 dst.at<uchar>(i, j) = 0;
  41.         }
  42.     }
  43.     imshow("Extindere", dst);
  44.     waitKey();
  45.     return dst;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement