Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <opencv2/core/core.hpp>
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- #include <iostream>
- #include <cstdlib>
- using namespace cv;
- using namespace std;
- int low_B = 15, low_G = 160, low_R = 117;
- int high_B = 35, high_G = 255, high_R = 255;
- int Canny_val = 50;
- Mat A_blured;
- Mat lower_red_hue_range, upper_red_hue_range, hue_image, red_hue_image;
- Mat image, size_image, HSV_image;
- Mat A_morph;
- Mat kernel = getStructuringElement(MORPH_RECT, Size(4, 4));
- Mat kernel2 = getStructuringElement(MORPH_RECT, Size(4, 4));
- Mat Canny_image;
- Mat src; Mat src_gray;
- int thresh = 100;
- int max_thresh = 255;
- RNG rng(12345);
- vector<vector<Point> > contours;
- vector<Vec4i> hierarchy;
- vector<vector<Point> > contours_poly(contours.size());
- vector<Point> approx;
- vector<Point2f>center(contours.size());
- vector<float>radius(contours.size());
- int main()
- {
- String path("C:\\Users\\Irek\\Desktop\\OpenCV_Template - Copy\\OpenCV_Template\\data\\Znak_STOP");
- vector<String> files;
- glob(path, files);
- int a = 0;
- int b = 0;
- for (size_t k = 0; k < files.size(); ++k)
- {
- image = imread(files[k]);
- if (image.empty()) continue;
- resize(image, size_image, Size(640, 640), 0, 0, INTER_LINEAR);
- medianBlur(size_image, A_blured, 3);
- GaussianBlur(A_blured, A_blured, Size(3, 3), 2, 2);
- cvtColor(A_blured, HSV_image, CV_BGR2HSV);
- inRange(HSV_image, Scalar(169, 104, 58), Scalar(179, 221, 128), lower_red_hue_range); // dolny przedzial dla koloru czerwonego
- inRange(HSV_image, Scalar(130, 130, 57), Scalar(255, 255, 120), upper_red_hue_range); // górny przedzial dla koloru czerwonego
- 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
- morphologyEx(red_hue_image, A_morph, 2, kernel);
- morphologyEx(A_morph, A_morph, 3, kernel2);
- Canny(A_morph, Canny_image, Canny_val, Canny_val * 2, 3);
- findContours(Canny_image, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, Point(0, 0));
- Mat drawing = Mat::zeros(Canny_image.size(), CV_8UC3);
- for (int i = 0; i < contours.size(); i++)
- {
- drawContours(drawing, contours, i, Scalar(250, 250, 250), 2);
- }
- Mat white_pixels;
- Canny(drawing, white_pixels, 100, 200, 3);
- int TotalWhitePixels = countNonZero(white_pixels);
- if (TotalWhitePixels > 0)
- {
- int i = 0;
- approxPolyDP(Mat(contours[i]), approx, 5, true);
- String windowScaled = "drawing" + to_string(k);
- int my_size = size(approx);
- if (size(approx) == 8)
- {
- for (int i = 0; i<approx.size(); i++)
- circle(white_pixels, cvPoint(approx[i].x, approx[i].y), 5, Scalar(250, 250, 250), -1, 8, 0);
- //namedWindow(windowScaled, CV_WINDOW_AUTOSIZE);
- //imshow(windowScaled, drawing);
- String source = "source" + to_string(k);;
- namedWindow(source, CV_WINDOW_AUTOSIZE);
- imshow(source, white_pixels);
- cout << "libcza wierzcholkow: " << my_size << " rysunek: " << windowScaled << endl; // ", i sciezka: " << files[k] << endl;
- a++;
- }
- else
- {
- for (int i = 0; i<approx.size(); i++)
- circle(white_pixels, cvPoint(approx[i].x, approx[i].y), 5, Scalar(250, 250, 250), -1, 8, 0);
- //namedWindow(windowScaled, CV_WINDOW_AUTOSIZE);
- //imshow(windowScaled, drawing);
- String source = "source" + to_string(k);
- namedWindow(source, CV_WINDOW_AUTOSIZE);
- imshow(source, white_pixels);
- cout << "na: " << windowScaled << " jest: " << my_size << " wierzcholkow" << endl;
- b++;
- }
- }
- else
- {
- cout << "nic nie ma!!" << endl;
- }
- }
- cout << endl << "wszystkich zdjec dobrze rozpoznanych jest: " << a;
- cout << endl << "wszystkich zdjec zle rozpoznanych: " << b << endl;
- //system("pause");
- waitKey();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement