diff --git a/AdvancedVision/AdvancedVision.vcxproj b/AdvancedVision/AdvancedVision.vcxproj index 06d2699..3f90d4f 100644 --- a/AdvancedVision/AdvancedVision.vcxproj +++ b/AdvancedVision/AdvancedVision.vcxproj @@ -1,4 +1,4 @@ - + @@ -89,13 +89,13 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - C:\opencv\build\include;%(AdditionalIncludeDirectories) - C:\opencv\build\include;%(AdditionalUsingDirectories) + D:\Code\OpenCV\install\include;%(AdditionalIncludeDirectories) + D:\Code\OpenCV\install\include;%(AdditionalUsingDirectories) Console true - C:\opencv\build\x64\vc14\lib;%(AdditionalLibraryDirectories) + D:\Code\OpenCV\install\x64\vc14\lib;%(AdditionalLibraryDirectories) opencv_world330.lib;opencv_world330d.lib;%(AdditionalDependencies) @@ -106,13 +106,13 @@ Disabled _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - C:\opencv\build\include;%(AdditionalIncludeDirectories) - C:\opencv\build\include;%(AdditionalUsingDirectories) + D:\Code\OpenCV\install\include;%(AdditionalIncludeDirectories) + D:\Code\OpenCV\install\include;%(AdditionalUsingDirectories) Console true - C:\opencv\build\x64\vc14\lib;%(AdditionalLibraryDirectories) + D:\Code\OpenCV\install\x64\vc14\lib;%(AdditionalLibraryDirectories) opencv_world330.lib;opencv_world330d.lib;%(AdditionalDependencies) @@ -125,8 +125,8 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - C:\opencv\build\include;%(AdditionalIncludeDirectories) - C:\opencv\build\include;%(AdditionalUsingDirectories) + D:\Code\OpenCV\install\include;%(AdditionalIncludeDirectories) + D:\Code\OpenCV\install\include;%(AdditionalUsingDirectories) Console @@ -134,7 +134,7 @@ true true opencv_world330.lib;opencv_world330d.lib;%(AdditionalDependencies) - C:\opencv\build\x64\vc14\lib;%(AdditionalLibraryDirectories) + D:\Code\OpenCV\install\x64\vc14\lib;%(AdditionalLibraryDirectories) @@ -146,8 +146,8 @@ true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - C:\opencv\build\include;%(AdditionalIncludeDirectories) - C:\opencv\build\include;%(AdditionalUsingDirectories) + D:\Code\OpenCV\install\include;%(AdditionalIncludeDirectories) + D:\Code\OpenCV\install\include;%(AdditionalUsingDirectories) Console @@ -155,7 +155,7 @@ true true opencv_world330.lib;opencv_world330d.lib;%(AdditionalDependencies) - C:\opencv\build\x64\vc14\lib;%(AdditionalLibraryDirectories) + D:\Code\OpenCV\install\x64\vc14\lib;%(AdditionalLibraryDirectories) diff --git a/AdvancedVision/MooreBoundaryTrackingAlgorithm.cpp b/AdvancedVision/MooreBoundaryTrackingAlgorithm.cpp index d978c22..d3a9246 100644 --- a/AdvancedVision/MooreBoundaryTrackingAlgorithm.cpp +++ b/AdvancedVision/MooreBoundaryTrackingAlgorithm.cpp @@ -2,6 +2,7 @@ #include "avansvisionlib.h" #include + //direction values // starting at position 0. Definition of relative positions: // 7 0 1 @@ -10,6 +11,16 @@ int rotateX[] = { 0, 1, 1, 1, 0, -1, -1, -1 }; int rotateY[] = { -1, -1, 0, 1, 1, 1, 0, -1 }; +struct pointCompare +{ + bool operator() (const Point &a, const Point &b) + { + if (a.x < b.x) + return true; + return a.y < b.y; + } +}; + int allContours(Mat binaryImage, vector>& contourVecVec) { Mat labeledImage; @@ -22,19 +33,19 @@ int allContours(Mat binaryImage, vector>& contourVecVec) Point b0, b1, c0, c1, firstb0, firstb1; for (Point2d *ptr : firstPixelVec2) { - set contourVec; + vector contourVec; - firstb0 = Point((int)ptr->x, (int)ptr->y); - b0 = Point((int)ptr->x, (int)ptr->y); - c0 = Point((int)(ptr->x - 1), (int)ptr->y); + firstb0 = Point((int)ptr->y, (int)ptr->x); + b0 = Point((int)ptr->y, (int)ptr->x); + c0 = Point((int)(ptr->y - 1), (int)ptr->x); int firstDirection = discoverNext(binaryImage, b0, 6); b1 = getDirPos(b0, firstDirection); - firstb1 = b1; + firstb1 = getDirPos(b0, firstDirection); c1 = getDirPos(b0, (firstDirection + 7) % 8); - contourVec.insert(b0); - contourVec.insert(b1); + contourVec.push_back(b0); + contourVec.push_back(b1); do { @@ -42,24 +53,32 @@ int allContours(Mat binaryImage, vector>& contourVecVec) c0 = c1; int dir = discoverNext(binaryImage, b0, discoverNextRelativeDirection(b0, c0)); + + if (dir < 0) + { + cout << "Het gaat eventjes niet goed hoor: " << b0 << " - " << c0 << endl; + } + b1 = getDirPos(b0, dir); c1 = getDirPos(b0, (dir + 7) % 8); - contourVec.insert(b1); + if(!contains(contourVec, b1)) + contourVec.push_back(b1); - } while (b0 == firstb0 && b1 == firstb1); + } while (b0 != firstb0 && b1 != firstb1); - std::vector output; - std::copy(contourVec.begin(), contourVec.end(), output.begin()); - contourVecVec.push_back(output); + contourVecVec.push_back(contourVec); } + flip(contourVecVec); + return numberOfBlobs; //number of objects } int discoverNext(Mat &binaryImage, cv::Point pos, int beginDirection) { - if (beginDirection > 8) { + if (beginDirection < 0 || beginDirection > 8) { + cout << "Begin direction is invalid : " << beginDirection << endl; return -1; } for (int i = 0; i < 8; i++) { @@ -68,7 +87,7 @@ int discoverNext(Mat &binaryImage, cv::Point pos, int beginDirection) int newX = pos.x + rotateX[dir]; int newY = pos.y + rotateY[dir]; - if (getEntry(binaryImage, newX, newY) == 1) { + if (getEntryImage(binaryImage, newX, newY) == 1) { return dir; } } @@ -99,3 +118,29 @@ cv::Point getDirPos(cv::Point pos, int dir) return cv::Point(x, y); } + +bool contains(vector vec, Point p) +{ + for (Point pnt : vec) + { + if (pnt.x == p.x && pnt.y == p.y) + return true; + } + + return false; +} + +void flip(vector> &vec) +{ + for (vector &pvec : vec) + { + for (Point &p : pvec) + { + int x = p.x; + int y = p.y; + + p.x = y; + p.y = x; + } + } +} \ No newline at end of file diff --git a/AdvancedVision/MooreBoundaryTrackingAlgorithm.h b/AdvancedVision/MooreBoundaryTrackingAlgorithm.h index ad5a7c8..aa28c4e 100644 --- a/AdvancedVision/MooreBoundaryTrackingAlgorithm.h +++ b/AdvancedVision/MooreBoundaryTrackingAlgorithm.h @@ -23,4 +23,7 @@ int discoverNextRelativeDirection(cv::Point pos, cv::Point target); // func: get a point with a given position and direction // return_value : new point -cv::Point getDirPos(cv::Point pos, int dir); \ No newline at end of file +cv::Point getDirPos(cv::Point pos, int dir); + +bool contains(vector vec, Point p); +void flip(vector> &vec); \ No newline at end of file