1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
From 357fc3f20d0a2252b6a0a6cab8a6ae6cf79b8565 Mon Sep 17 00:00:00 2001
From: Jochen Sprickerhof <git@jochen.sprickerhof.de>
Date: Wed, 23 Oct 2019 22:15:57 +0200
Subject: [PATCH] Support OpenCV 4
---
src/nodelet/face_recognition_nodelet.cpp | 18 +++++++++++++++---
src/nodelet/segment_objects_nodelet.cpp | 4 ++++
src/nodelet/simple_flow_nodelet.cpp | 4 ++--
3 files changed, 21 insertions(+), 5 deletions(-)
Index: opencv_apps-2.0.1/src/nodelet/face_recognition_nodelet.cpp
===================================================================
--- opencv_apps-2.0.1.orig/src/nodelet/face_recognition_nodelet.cpp
+++ opencv_apps-2.0.1/src/nodelet/face_recognition_nodelet.cpp
@@ -229,7 +229,11 @@ public:
fs::path file_path = cit->path();
try
{
+#if CV_MAJOR_VERSION > 3
+ cv::Mat img = cv::imread(file_path.string(), cv::IMREAD_COLOR);
+#else
cv::Mat img = cv::imread(file_path.string(), CV_LOAD_IMAGE_COLOR);
+#endif
labels.push_back(label);
images.push_back(img);
}
@@ -327,7 +331,11 @@ class FaceRecognitionNodelet : public op
int(face.face.height + face.face.height * face_padding_));
cv::Scalar color(0.0, 0.0, 255.0);
int boldness = 2;
+#if CV_MAJOR_VERSION > 3
+ cv::rectangle(img, r.tl(), r.br(), color, boldness, cv::LINE_AA);
+#else
cv::rectangle(img, r.tl(), r.br(), color, boldness, CV_AA);
+#endif
double font_scale = 1.5;
int text_height = 20;
@@ -338,7 +346,11 @@ class FaceRecognitionNodelet : public op
text_bl = r.br() + cv::Point(-r.width, text_height);
std::stringstream ss;
ss << face.label << " (" << std::fixed << std::setprecision(2) << face.confidence << ")";
+#if CV_MAJOR_VERSION > 3
+ cv::putText(img, ss.str(), text_bl, cv::FONT_HERSHEY_PLAIN, font_scale, color, boldness, cv::LINE_AA);
+#else
cv::putText(img, ss.str(), text_bl, cv::FONT_HERSHEY_PLAIN, font_scale, color, boldness, CV_AA);
+#endif
}
void extractImage(const cv::Mat& img, const opencv_apps::Rect& rect, cv::Mat& ret, double padding = 0.0)
@@ -548,7 +560,7 @@ class FaceRecognitionNodelet : public op
if (config.model_method == "eigen")
{
// https://docs.opencv.org/3.3.1/da/d60/tutorial_face_main.html
-#if CV_MAJOR_VERSION >= 3 && CV_MINOR_VERSION >= 3
+#if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION >= 3 && CV_MINOR_VERSION >= 3)
model_ = face::EigenFaceRecognizer::create(config.model_num_components, config.model_threshold);
#else
model_ = face::createEigenFaceRecognizer(config.model_num_components, config.model_threshold);
@@ -556,7 +568,7 @@ class FaceRecognitionNodelet : public op
}
else if (config.model_method == "fisher")
{
-#if CV_MAJOR_VERSION >= 3 && CV_MINOR_VERSION >= 3
+#if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION >= 3 && CV_MINOR_VERSION >= 3)
model_ = face::FisherFaceRecognizer::create(config.model_num_components, config.model_threshold);
#else
model_ = face::createFisherFaceRecognizer(config.model_num_components, config.model_threshold);
@@ -564,7 +576,7 @@ class FaceRecognitionNodelet : public op
}
else if (config.model_method == "LBPH")
{
-#if CV_MAJOR_VERSION >= 3 && CV_MINOR_VERSION >= 3
+#if CV_MAJOR_VERSION > 3 || (CV_MAJOR_VERSION >= 3 && CV_MINOR_VERSION >= 3)
model_ = face::LBPHFaceRecognizer::create(config.lbph_radius, config.lbph_neighbors, config.lbph_grid_x,
config.lbph_grid_y);
#else
Index: opencv_apps-2.0.1/src/nodelet/segment_objects_nodelet.cpp
===================================================================
--- opencv_apps-2.0.1.orig/src/nodelet/segment_objects_nodelet.cpp
+++ opencv_apps-2.0.1/src/nodelet/segment_objects_nodelet.cpp
@@ -179,7 +179,11 @@ class SegmentObjectsNodelet : public ope
}
}
cv::Scalar color(0, 0, 255);
+#if CV_MAJOR_VERSION > 3
+ cv::drawContours(out_frame, contours, largest_comp, color, cv::FILLED, 8, hierarchy);
+#else
cv::drawContours(out_frame, contours, largest_comp, color, CV_FILLED, 8, hierarchy);
+#endif
std_msgs::Float64 area_msg;
area_msg.data = max_area;
Index: opencv_apps-2.0.1/src/nodelet/simple_flow_nodelet.cpp
===================================================================
--- opencv_apps-2.0.1.orig/src/nodelet/simple_flow_nodelet.cpp
+++ opencv_apps-2.0.1/src/nodelet/simple_flow_nodelet.cpp
@@ -46,7 +46,7 @@
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/video/tracking.hpp>
-#if CV_MAJOR_VERSION == 3
+#if CV_MAJOR_VERSION >= 3
#include <opencv2/optflow.hpp>
#endif
@@ -163,8 +163,8 @@ class SimpleFlowNodelet : public opencv_
}
float start = (float)cv::getTickCount();
-#if CV_MAJOR_VERSION == 3
- cv::optflow::calcOpticalFlowSF(gray, prevGray,
+#if CV_MAJOR_VERSION >= 3
+ cv::optflow::calcOpticalFlowSF(gray, prevGray,
#else
cv::calcOpticalFlowSF(gray, prevGray,
#endif
|