Skip to content

Commit 78b761a

Browse files
authored
Merge pull request #18 from rursprung/use-ostream-operator-for-result-printing
refactor analysis result printing & reduce OpenCV log level from INFO to WARN
2 parents a604ad4 + f4be638 commit 78b761a

File tree

4 files changed

+25
-26
lines changed

4 files changed

+25
-26
lines changed

apps/livecam/main.cpp

+4-12
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <stdexcept>
55

66
#include <opencv2/opencv.hpp>
7+
#include <opencv2/core/utils/logger.hpp>
78

89
#include <banana-lib/lib.hpp>
910

@@ -26,17 +27,6 @@ auto GetVideoCaptureFromArgs(int const argc, char const * const argv[]) -> cv::V
2627
}
2728
}
2829

29-
void PrintAnalysisResult(banana::AnnotatedAnalysisResult const& analysis_result) {
30-
std::cout << "found " << analysis_result.banana.size() << " banana(s) in the picture" << std::endl;
31-
32-
for (auto const& [n, banana] : std::ranges::enumerate_view(analysis_result.banana)) {
33-
auto const& [coeff_0, coeff_1, coeff_2] = banana.center_line_coefficients;
34-
std::cout << " Banana #" << n << ":" << std::endl;
35-
std::cout << " " << std::format("y = {} + {} * x + {} * x^2", coeff_0, coeff_1, coeff_2) << std::endl;
36-
std::cout << std::endl;
37-
}
38-
}
39-
4030
void ShowAnalysisResult(banana::AnnotatedAnalysisResult const& analysis_result) {
4131
std::string const windowName = "analysis result | press q to quit";
4232
cv::namedWindow(windowName, cv::WINDOW_KEEPRATIO);
@@ -45,6 +35,8 @@ void ShowAnalysisResult(banana::AnnotatedAnalysisResult const& analysis_result)
4535
}
4636

4737
int main(int const argc, char const * const argv[]) {
38+
cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_WARNING);
39+
4840
banana::Analyzer const analyzer{true};
4941
try {
5042
auto cap = GetVideoCaptureFromArgs(argc, argv);
@@ -73,7 +65,7 @@ Available action keys:
7365

7466
switch (cv::pollKey()) {
7567
case 'i':
76-
PrintAnalysisResult(*analysisResult);
68+
std::cout << *analysisResult;
7769
break;
7870
case 'q':
7971
return 0;

apps/static-image/main.cpp

+4-14
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
#include <format>
33
#include <iostream>
44
#include <stdexcept>
5-
#include <numbers>
65

76
#include <opencv2/opencv.hpp>
7+
#include <opencv2/core/utils/logger.hpp>
88

99
#include <banana-lib/lib.hpp>
1010

@@ -24,18 +24,6 @@ auto GetPathFromArgs(int const argc, char const * const argv[]) -> std::filesyst
2424
return image_path;
2525
}
2626

27-
void PrintAnalysisResult(banana::AnnotatedAnalysisResult const& analysis_result) {
28-
std::cout << "found " << analysis_result.banana.size() << " banana(s) in the picture" << std::endl;
29-
30-
for (auto const& [n, banana] : std::ranges::enumerate_view(analysis_result.banana)) {
31-
auto const& [coeff_0, coeff_1, coeff_2] = banana.center_line_coefficients;
32-
std::cout << " Banana #" << n << ":" << std::endl;
33-
std::cout << " " << std::format("y = {} + {} * x + {} * x^2", coeff_0, coeff_1, coeff_2) << std::endl;
34-
std::cout << " Rotation = " << (banana.rotation_angle * 180 / std::numbers::pi) << " degrees" << std::endl;
35-
std::cout << std::endl;
36-
}
37-
}
38-
3927
void ShowAnalysisResult(banana::AnnotatedAnalysisResult const& analysis_result) {
4028
std::string const windowName = "analysis result | press q to quit";
4129
cv::namedWindow(windowName, cv::WINDOW_KEEPRATIO);
@@ -45,6 +33,8 @@ void ShowAnalysisResult(banana::AnnotatedAnalysisResult const& analysis_result)
4533
}
4634

4735
int main(int const argc, char const * const argv[]) {
36+
cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_WARNING);
37+
4838
banana::Analyzer const analyzer{true};
4939
try {
5040
auto const path = GetPathFromArgs(argc, argv);
@@ -53,7 +43,7 @@ int main(int const argc, char const * const argv[]) {
5343
auto const analysisResult = analyzer.AnalyzeAndAnnotateImage(img);
5444

5545
if(analysisResult) {
56-
PrintAnalysisResult(*analysisResult);
46+
std::cout << *analysisResult;
5747
ShowAnalysisResult(*analysisResult);
5848
} else {
5949
std::cerr << "failed to analyse the image: " << analysisResult.error().ToString() << std::endl;

include/banana-lib/lib.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ namespace banana {
7676
std::list<AnalysisResult> banana;
7777
};
7878

79+
/// Print detailed information about the result to an output stream.
80+
std::ostream& operator << (std::ostream& o, AnnotatedAnalysisResult const& analysis_result);
81+
7982
class Analyzer {
8083
public:
8184
explicit Analyzer(bool verbose_annotations = false);

src/lib.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <numbers>
12
#include <stdexcept>
23

34
#include <polyfit/Polynomial2DFit.hpp>
@@ -36,6 +37,19 @@ namespace banana {
3637
return this->ToString();
3738
}
3839

40+
std::ostream& operator << (std::ostream& o, AnnotatedAnalysisResult const& analysis_result) {
41+
o << "found " << analysis_result.banana.size() << " banana(s) in the picture" << std::endl;
42+
for (auto const& [n, banana] : std::ranges::enumerate_view(analysis_result.banana)) {
43+
auto const& [coeff_0, coeff_1, coeff_2] = banana.center_line_coefficients;
44+
o << " Banana #" << n << ":" << std::endl;
45+
o << " " << std::format("y = {} + {} * x + {} * x^2", coeff_0, coeff_1, coeff_2) << std::endl;
46+
o << " Rotation = " << (banana.rotation_angle * 180 / std::numbers::pi) << " degrees" << std::endl;
47+
o << std::endl;
48+
}
49+
50+
return o;
51+
}
52+
3953
Analyzer::Analyzer(bool const verbose_annotations) : verbose_annotations_(verbose_annotations) {
4054
cv::FileStorage fs("resources/reference-contours.yml", cv::FileStorage::READ);
4155
if (!fs.isOpened()) {

0 commit comments

Comments
 (0)