From 977f531f72887901d81452479e185c77c269abf3 Mon Sep 17 00:00:00 2001 From: TimZnr Date: Wed, 23 Nov 2022 17:10:04 +0100 Subject: [PATCH] New approach using a roi and drawContours method --- AutonomousMode/Spielwiese/spielwiese.cpp | 66 ++++++++++++++++++++---- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/AutonomousMode/Spielwiese/spielwiese.cpp b/AutonomousMode/Spielwiese/spielwiese.cpp index 5b27b5b..a699702 100644 --- a/AutonomousMode/Spielwiese/spielwiese.cpp +++ b/AutonomousMode/Spielwiese/spielwiese.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -34,20 +35,63 @@ void sweep_em_all(int thresholdBinary, int videoHeight, int videoWidth, int gaus void in_depth_processing_chain(int thresholdBinary, int videoHeight, int videoWidth, int gaussKernelSize, int thresholdCanny1, int thresholdCanny2, int apertureSizeCanny) { - std::string outputFolder = "C:\\Users\\User\\Desktop\\temp"; Input input(videoHeight, videoWidth); - Mat image = input.readFile("C:\\Users\\User\\Desktop\\Studium\\02_Master_MSY\\2. Semester Winter 22 23\\Projekt\\Line-Following-Robot\\Test_data"); - imwrite(outputFolder + "\\01_input.jpg", image); - cvtColor(image, image, COLOR_BGR2GRAY); - imwrite(outputFolder + "\\02_color_convert.jpg", image); - GaussianBlur(image, image, Size(gaussKernelSize, gaussKernelSize), 0); - imwrite(outputFolder + "\\03_gauss.jpg", image); - threshold(image, image, thresholdBinary, 255, THRESH_BINARY); - imwrite(outputFolder + "\\04_threshold.jpg", image); - Canny(image, image, thresholdCanny1, thresholdCanny2, apertureSizeCanny); - imwrite(outputFolder + "\\05_canny.jpg", image); + std::string outputFolder = "C:\\Users\\User\\Desktop\\temp"; + std::string inputFolder = "C:\\Users\\User\\Desktop\\Studium\\02_Master_MSY\\2. Semester Winter 22 23\\Projekt\\Line-Following-Robot\\AutonomousMode\\Test_data"; + std::vector filenames; + cv::glob(inputFolder, filenames); + + //filenames.begin(), filenames.end() + int i = 0; + for(std::vector::iterator it = filenames.begin(); it != filenames.end(); it++) + { + std::string current_output = outputFolder + "\\" + to_string(i); + std::cout << current_output << std::endl; + const char* current_output_char = current_output.c_str(); + _mkdir(current_output_char); + + std::string inputFile = inputFolder + "\\image" + to_string(i+1) + ".jpeg"; + Mat original_image = input.readFile(inputFile); + imwrite(current_output + "\\00_input.jpg", original_image); + + Rect roi = Rect(0, original_image.rows*(7.5/12.0), original_image.cols, original_image.rows/12); + + Mat image = original_image(roi); + + imwrite(current_output + "\\01_roi.jpg", image); + cvtColor(image, image, COLOR_BGR2GRAY); + imwrite(current_output + "\\02_color_convert.jpg", image); + GaussianBlur(image, image, Size(gaussKernelSize, gaussKernelSize), 0); + imwrite(current_output + "\\03_gauss.jpg", image); + threshold(image, image, thresholdBinary, 255, THRESH_BINARY); + imwrite(current_output + "\\04_threshold.jpg", image); + + // Opening (reduces noise) + Mat kernel(5,5, CV_8UC1,1); + morphologyEx(image, image, 2, kernel); + imwrite(current_output + "\\05_opening.jpg", image); + + //Canny(image, image, thresholdCanny1, thresholdCanny2, apertureSizeCanny); + //imwrite(outputFolder + "\\06_canny.jpg", image); + + vector > contours; + vector hierarchy; + + findContours(image,contours, hierarchy, RETR_LIST, CHAIN_APPROX_SIMPLE); + + for( int i = 0; i< contours.size(); i++ ) // iterate through each contour. + { + double a = contourArea( contours[i],false); // Find the area of contour + if(a > 3500) + { + drawContours(original_image, contours, i, Scalar(0,255,255), 1, 8, hierarchy, 0, Point(0,original_image.rows*(7.5/12.0))); + } + } + imwrite(current_output + "\\06_contours.jpg", original_image); + i++; + } }