Advertisement
Guest User

Untitled

a guest
Aug 15th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. #include <opencv2/core/core.hpp>
  2. #include <opencv2/highgui/highgui.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. #include <iostream>
  5. #include <cstdlib>
  6.  
  7. using namespace cv;
  8. using namespace std;
  9.  
  10. int low_B = 15, low_G = 160, low_R = 117;
  11. int high_B = 35, high_G = 255, high_R = 255;
  12. int Canny_val = 50;
  13.  
  14. Mat A_blured;
  15. Mat lower_red_hue_range, upper_red_hue_range, hue_image, red_hue_image;
  16. Mat image, size_image, HSV_image;
  17. Mat A_morph;
  18. Mat kernel = getStructuringElement(MORPH_RECT, Size(4, 4));
  19. Mat kernel2 = getStructuringElement(MORPH_RECT, Size(4, 4));
  20. Mat Canny_image;
  21.  
  22. Mat src; Mat src_gray;
  23. int thresh = 100;
  24. int max_thresh = 255;
  25. RNG rng(12345);
  26.  
  27. vector<vector<Point> > contours;
  28. vector<Vec4i> hierarchy;
  29.  
  30. vector<vector<Point> > contours_poly(contours.size());
  31. vector<Point> approx;
  32. vector<Point2f>center(contours.size());
  33. vector<float>radius(contours.size());
  34.  
  35. int main()
  36. {
  37.  
  38. String path("C:\\Users\\Irek\\Desktop\\OpenCV_Template - Copy\\OpenCV_Template\\data\\Znak_STOP");
  39.  
  40. vector<String> files;
  41. glob(path, files);
  42. int a = 0;
  43. int b = 0;
  44. for (size_t k = 0; k < files.size(); ++k)
  45. {
  46. image = imread(files[k]);
  47. if (image.empty()) continue;
  48.  
  49. resize(image, size_image, Size(640, 640), 0, 0, INTER_LINEAR);
  50.  
  51. medianBlur(size_image, A_blured, 3);
  52. GaussianBlur(A_blured, A_blured, Size(3, 3), 2, 2);
  53.  
  54. cvtColor(A_blured, HSV_image, CV_BGR2HSV);
  55. inRange(HSV_image, Scalar(169, 104, 58), Scalar(179, 221, 128), lower_red_hue_range); // dolny przedzial dla koloru czerwonego
  56. inRange(HSV_image, Scalar(130, 130, 57), Scalar(255, 255, 120), upper_red_hue_range); // górny przedzial dla koloru czerwonego
  57.  
  58. addWeighted(lower_red_hue_range, 1.0, upper_red_hue_range, 1.0, 0.0, red_hue_image); // polaczenie dwóch przedzialów koloru czerwonego na obrazie
  59.  
  60. morphologyEx(red_hue_image, A_morph, 2, kernel);
  61. morphologyEx(A_morph, A_morph, 3, kernel2);
  62.  
  63. Canny(A_morph, Canny_image, Canny_val, Canny_val * 2, 3);
  64.  
  65.  
  66. findContours(Canny_image, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, Point(0, 0));
  67.  
  68.  
  69. Mat drawing = Mat::zeros(Canny_image.size(), CV_8UC3);
  70. for (int i = 0; i < contours.size(); i++)
  71. {
  72. drawContours(drawing, contours, i, Scalar(250, 250, 250), 2);
  73. }
  74.  
  75. Mat white_pixels;
  76. Canny(drawing, white_pixels, 100, 200, 3);
  77.  
  78. int TotalWhitePixels = countNonZero(white_pixels);
  79. if (TotalWhitePixels > 0)
  80. {
  81. int i = 0;
  82. approxPolyDP(Mat(contours[i]), approx, 5, true);
  83.  
  84. String windowScaled = "drawing" + to_string(k);
  85.  
  86. int my_size = size(approx);
  87. if (size(approx) == 8)
  88. {
  89. for (int i = 0; i<approx.size(); i++)
  90. circle(white_pixels, cvPoint(approx[i].x, approx[i].y), 5, Scalar(250, 250, 250), -1, 8, 0);
  91. //namedWindow(windowScaled, CV_WINDOW_AUTOSIZE);
  92. //imshow(windowScaled, drawing);
  93. String source = "source" + to_string(k);;
  94. namedWindow(source, CV_WINDOW_AUTOSIZE);
  95. imshow(source, white_pixels);
  96. cout << "libcza wierzcholkow: " << my_size << " rysunek: " << windowScaled << endl; // ", i sciezka: " << files[k] << endl;
  97. a++;
  98. }
  99. else
  100. {
  101. for (int i = 0; i<approx.size(); i++)
  102. circle(white_pixels, cvPoint(approx[i].x, approx[i].y), 5, Scalar(250, 250, 250), -1, 8, 0);
  103. //namedWindow(windowScaled, CV_WINDOW_AUTOSIZE);
  104. //imshow(windowScaled, drawing);
  105. String source = "source" + to_string(k);
  106. namedWindow(source, CV_WINDOW_AUTOSIZE);
  107. imshow(source, white_pixels);
  108. cout << "na: " << windowScaled << " jest: " << my_size << " wierzcholkow" << endl;
  109. b++;
  110. }
  111. }
  112. else
  113. {
  114. cout << "nic nie ma!!" << endl;
  115. }
  116. }
  117. cout << endl << "wszystkich zdjec dobrze rozpoznanych jest: " << a;
  118. cout << endl << "wszystkich zdjec zle rozpoznanych: " << b << endl;
  119. //system("pause");
  120. waitKey();
  121. return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement