Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Mat extendEdge(Mat src, int neighbours) {
- int height = src.rows, width = src.cols;
- Mat dst = src.clone();
- int di[8] = { -1, 0, 1, 0, -1, -1, 1, 1 };
- int dj[8] = { 0, -1, 0, 1, -1, 1, -1, 1 };
- //int di[16] = { -1, 0, 1, 0, -1, -1, 1, 1, -2, 0, 2, 0, -2, 2, 2, -2 };
- //int dj[16] = { 0, -1, 0, 1, -1, 1, -1, 1, 0, -2, 0, 2, -2, -2, 2, 2 };
- //Parcurgere pentru creare muchii tari
- Mat visited = Mat::zeros(height, width, CV_8UC1);
- for (int i = 0; i < height; i++) {
- for (int j = 0; j < width; j++) {
- uchar pixel = src.at<uchar>(i, j);
- if (pixel == 255) {
- std::queue<Point2i> Q;
- Q.push(Point2i(i, j));
- while (!Q.empty()) {
- Point2i point = Q.front(); //Luam primul element din coada, fara a-l sterge
- Q.pop(); //Stergem primul element din coada
- //Parcurgem vecinii
- for (int k = 0; k < 16; k++) {
- int x = point.x + di[k],
- y = point.y + dj[k];
- if (x > 0 && x < height && y > 0 && y < width) {
- if (src.at<uchar>(x, y) == 128 && visited.at<uchar>(x, y) == 0) {
- dst.at<uchar>(x, y) = 255;
- visited.at<uchar>(x, y) = 1;
- Q.push(Point2i(x, y)); //Adaugam vecinii in coada
- }
- }
- }
- }
- }
- }
- }
- //Parcurgere pentru eliminarea muchiilor slabe ramase
- for (int i = 0; i < height; i++) {
- for (int j = 0; j < width; j++) {
- uchar pixel = dst.at<uchar>(i, j);
- if (pixel == 128)
- dst.at<uchar>(i, j) = 0;
- }
- }
- imshow("Extindere", dst);
- waitKey();
- return dst;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement