Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. struct custom_point {
  2. int y;
  3. int x;
  4. byte dir;
  5. };
  6.  
  7. void findContour() {
  8. char fname[MAX_PATH];
  9. while (openFileDlg(fname)) {
  10. Mat src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  11. Mat dst = Mat(src.size(), CV_LOAD_IMAGE_GRAYSCALE);
  12.  
  13. std::vector<custom_point> contur;
  14. int n = 0;
  15. byte dir = 7;
  16. int x, y;
  17.  
  18. int dj[8] = { 1, 1, 0, -1, -1, -1, 0, 1 };
  19. int di[8] = { 0, -1, -1, -1, 0, 1, 1, 1 };
  20.  
  21. int I = 0, J = 0;
  22.  
  23. for (int i = 0; i < src.rows; i++) {
  24. for (int j = 0; j < src.cols; j++) {
  25. dst.at<uchar>(i, j) = 255;
  26. }
  27. }
  28.  
  29. bool ok = true;
  30. for (int i = 0; i < src.rows && ok; i++) {
  31. for (int j = 0; j < src.cols && ok; j++) {
  32. if (src.at<uchar>(i, j) == 0) {
  33. dst.at<uchar>(i, j) = 0;
  34. contur.push_back(custom_point{ i, j, dir });
  35. I = i;
  36. J = j;
  37. ok = false;
  38. }
  39. }
  40. }
  41.  
  42. bool finished = false;
  43. byte d = 0;
  44.  
  45. while (!finished) {
  46. if (dir % 2 == 0) {
  47. dir = (dir + 7) % 8;
  48. } else {
  49. dir = (dir + 6) % 8;
  50. }
  51.  
  52. for (int k = 0; k < 8; k++) {
  53. d = (dir + k) % 8;
  54. y = J + dj[d];
  55. x = I + di[d];
  56.  
  57. if (src.at<uchar>(x, y) == 0) {
  58. dir = d;
  59. dst.at<uchar>(x, y) = 0;
  60. contur.push_back(custom_point{ x, y, dir });
  61. I = x;
  62. J = y;
  63. n++;
  64. break;
  65. }
  66. }
  67.  
  68. if (n > 1) {
  69. if ((contur[0].x == contur[n - 1].x) && (contur[1].x == contur[n].x) &&
  70. (contur[0].y == contur[n - 1].y) && (contur[1].y == contur[n].y)) {
  71. finished = true;
  72. }
  73. }
  74.  
  75. }
  76.  
  77. imshow("Img", src);
  78. imshow("New Img", dst);
  79. waitKey();
  80. }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement