Skip to content

Commit 2ffd3d2

Browse files
committed
Moved method to make more public available and created a method.
1 parent bdf8bbb commit 2ffd3d2

4 files changed

Lines changed: 32 additions & 25 deletions

File tree

ReadMagicCard/ImageHelper.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,28 @@ Mat ImageHelper::ToColourImage(const Mat imageToConvert) {
6161
return changeImageMode(imageToConvert, COLOR_GRAY2BGR);
6262
}
6363

64+
LetterAreas ImageHelper::ToLetterAreas(Contours contours) {
65+
66+
LetterAreas allAreas;
67+
68+
for (size_t i = 0; i < contours.size(); i++) {
69+
70+
Contour letterContour = ImageHelper::ContoursConvexHull({ contours[i] });
71+
RotatedRect letterBox = minAreaRect(letterContour);
72+
73+
LetterArea area;
74+
area.TightContour = contours[i];
75+
area.OuterContour = letterContour;
76+
area.Box = letterBox;
77+
78+
allAreas.push_back(area);
79+
}
80+
81+
sort(allAreas.begin(), allAreas.end(), LetterArea::CompareLetterAreaByLeftBorderXAscending);
82+
83+
return allAreas;
84+
}
85+
6486
RotatedRect ImageHelper::GetRotatedRectangle(vector<TrendLine> verticalBorders, vector<TrendLine> horizontalBorders, double angleAdjustment) {
6587

6688
//Make sure the borders are correct.
@@ -246,6 +268,11 @@ Mat ImageHelper::DrawCenterPoint(const Mat image, const Point imageCenter, Scala
246268
return workingImage;
247269
}
248270

271+
void ImageHelper::FillContour(Mat& image, const Contour contour, const Scalar colour) {
272+
273+
fillConvexPoly(image, contour, colour);
274+
}
275+
249276
double ImageHelper::GetAnglesToStrightenUp(const RotatedRect rotatedRectangle, bool enforcePortraitMode) {
250277

251278
if (enforcePortraitMode) {

ReadMagicCard/ImageHelper.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class ImageHelper
1818
static cv::Mat ToGreyImage(const cv::Mat imageToConvert);
1919
//Creates a colour image out of the provided image. Note: This method doesn't add any colours to the image.
2020
static cv::Mat ToColourImage(const cv::Mat imageToConvert);
21+
//Gets letter area data from a set of contours.
22+
static LetterAreas ToLetterAreas(Contours contours);
2123
//Creates the rectangle bound by the the specified borders.
2224
static cv::RotatedRect GetRotatedRectangle(std::vector<TrendLine> verticalBorders, std::vector<TrendLine> horizontalBorders, double angleAdjustment = 0.0);
2325
//Displays a specified image in a window.
@@ -36,6 +38,8 @@ class ImageHelper
3638
static cv::Mat DrawLimits(const cv::Mat image, const LetterAreas letters, int letterCenterRadius);
3739
//Draws the specified center point to the image.
3840
static cv::Mat DrawCenterPoint(const cv::Mat image, const cv::Point imageCenter, cv::Scalar colour = cv::Scalar(0, 0, 255), int radius = 3);
41+
//Fills a contour in the image with the specified colour.
42+
static void FillContour(cv::Mat& image, const Contour contour, const cv::Scalar colour);
3943
//Gets how many degrees the rectangle needs to be rotated in positive direction (counter-clockwise) to be straight.
4044
static double GetAnglesToStrightenUp(const cv::RotatedRect rotatedRectangle, bool enforcePortraitMode = true);
4145
//Gets the center point of an image.

ReadMagicCard/LetterFilter.cpp

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ LetterAreas LetterFilter::RunFilter(Contours contours, int numberOfTries) {
3333
textBaseLine = textCenterLine = TrendLine(0, originalImageData.rows / 2);
3434

3535
//Do a crude filtering of the the letters.
36-
LetterAreas allPossibleLetters = getPossibleLetterAreas(contours);
36+
LetterAreas allPossibleLetters = ImageHelper::ToLetterAreas(contours);
3737
LetterAreas letters = filterOutNonTitleSymbols(allPossibleLetters);
3838

3939
//Check if there was any letters at all.
@@ -135,28 +135,6 @@ TrendLine LetterFilter::findBaseLine(LetterAreas letters) {
135135
return baseLine;
136136
}
137137

138-
LetterAreas LetterFilter::getPossibleLetterAreas(Contours contours) {
139-
140-
LetterAreas possibleLetterAreas;
141-
142-
for (size_t i = 0; i < contours.size(); i++) {
143-
144-
Contour letterContour = ImageHelper::ContoursConvexHull({ contours[i] });
145-
RotatedRect letterBox = minAreaRect(letterContour);
146-
147-
LetterArea area;
148-
area.TightContour = contours[i];
149-
area.OuterContour = letterContour;
150-
area.Box = letterBox;
151-
152-
possibleLetterAreas.push_back(area);
153-
}
154-
155-
sort(possibleLetterAreas.begin(), possibleLetterAreas.end(), LetterArea::CompareLetterAreaByLeftBorderXAscending);
156-
157-
return possibleLetterAreas;
158-
}
159-
160138
LetterAreas LetterFilter::filterOutNonTitleSymbols(LetterAreas lettersToFilter) {
161139

162140
LetterAreas letters;

ReadMagicCard/LetterFilter.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ class LetterFilter :
2222
TrendLine findCenterLine(LetterAreas letters);
2323
//Finds the base line (the line marking the bottom) for a set of letters.
2424
TrendLine findBaseLine(LetterAreas letters);
25-
//Gets the areas that might contain a title letter.
26-
LetterAreas getPossibleLetterAreas(Contours contours);
2725
//Filter out letter areas that are identical, ie letter areas pointing at the same letter.
2826
LetterAreas filterOutDuplicates(LetterAreas lettersToFilter);
2927
//Removes the areas that are noise.

0 commit comments

Comments
 (0)