Skip to content

Commit 14157b1

Browse files
author
AleksandrPanov
committed
fixed duplicate corners and style
1 parent 5d90679 commit 14157b1

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

modules/wechat_qrcode/src/decodermgr.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ int DecoderMgr::decodeImage(cv::Mat src, bool use_nn_detector, vector<string>& r
4545
}
4646
int ret = TryDecode(source, zx_results);
4747
if (!ret) {
48-
for(unsigned int k=0; k<zx_results.size(); k++){
48+
for(size_t k = 0; k < zx_results.size(); k++) {
4949
results.emplace_back(zx_results[k]->getText()->getText());
5050
vector<Point2f> tmp_qr_points;
5151
auto tmp_zx_points = zx_results[k]->getResultPoints();
52-
for(int i = 0; i < tmp_zx_points->size() / 4; i++) {
52+
for (int i = 0; i < tmp_zx_points->size() / 4; i++) {
5353
const int ind = i * 4;
5454
for (int j = 1; j < 4; j++){
55-
tmp_qr_points.emplace_back(tmp_zx_points[ind+j]->getX(), tmp_zx_points[ind+j]->getY());
55+
tmp_qr_points.emplace_back(tmp_zx_points[ind + j]->getX(), tmp_zx_points[ind + j]->getY());
5656
}
5757
tmp_qr_points.emplace_back(tmp_zx_points[ind]->getX(), tmp_zx_points[ind]->getY());
5858
}

modules/wechat_qrcode/src/wechat_qrcode.cpp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,10 @@ vector<string> WeChatQRCode::Impl::decode(const Mat& img, vector<Mat>& candidate
144144
super_resolution_model_->processImageScale(cropped_img, cur_scale, use_nn_sr_);
145145
string result;
146146
DecoderMgr decodemgr;
147-
vector<vector<Point2f>> zxing_points;
147+
vector<vector<Point2f>> zxing_points, check_points;
148148
auto ret = decodemgr.decodeImage(scaled_img, use_nn_detector_, decode_results, zxing_points);
149149
if (ret == 0) {
150-
for(unsigned int i=0; i<zxing_points.size(); ++i){
150+
for(size_t i = 0; i <zxing_points.size(); i++){
151151
vector<Point2f> points_qr = zxing_points[i];
152152
for (auto&& pt: points_qr) {
153153
pt /= cur_scale;
@@ -159,7 +159,28 @@ vector<string> WeChatQRCode::Impl::decode(const Mat& img, vector<Mat>& candidate
159159
point.at<float>(j, 0) = points_qr[j].x;
160160
point.at<float>(j, 1) = points_qr[j].y;
161161
}
162-
points.push_back(point);
162+
// try to find duplicate qr corners
163+
bool isDuplicate = false;
164+
for (const auto &tmp_points: check_points) {
165+
const float eps = 10.f;
166+
for (size_t j = 0; j < tmp_points.size(); j++) {
167+
if (abs(tmp_points[j].x - points_qr[j].x) < eps &&
168+
abs(tmp_points[j].y - points_qr[j].y) < eps) {
169+
isDuplicate = true;
170+
}
171+
else {
172+
isDuplicate = false;
173+
break;
174+
}
175+
}
176+
}
177+
if (isDuplicate == false) {
178+
points.push_back(point);
179+
check_points.push_back(points_qr);
180+
}
181+
else {
182+
decode_results.erase(decode_results.begin() + i, decode_results.begin() + i + 1);
183+
}
163184
}
164185
break;
165186
}

0 commit comments

Comments
 (0)