diff --git a/modules/wechat_qrcode/src/decodermgr.cpp b/modules/wechat_qrcode/src/decodermgr.cpp index 9f8ad419a..1e93aa15c 100644 --- a/modules/wechat_qrcode/src/decodermgr.cpp +++ b/modules/wechat_qrcode/src/decodermgr.cpp @@ -45,14 +45,14 @@ int DecoderMgr::decodeImage(cv::Mat src, bool use_nn_detector, vector& r } int ret = TryDecode(source, zx_results); if (!ret) { - for(unsigned int k=0; kgetText()->getText()); vector tmp_qr_points; auto tmp_zx_points = zx_results[k]->getResultPoints(); - for(int i = 0; i < tmp_zx_points->size() / 4; i++) { + for (int i = 0; i < tmp_zx_points->size() / 4; i++) { const int ind = i * 4; for (int j = 1; j < 4; j++){ - tmp_qr_points.emplace_back(tmp_zx_points[ind+j]->getX(), tmp_zx_points[ind+j]->getY()); + tmp_qr_points.emplace_back(tmp_zx_points[ind + j]->getX(), tmp_zx_points[ind + j]->getY()); } tmp_qr_points.emplace_back(tmp_zx_points[ind]->getX(), tmp_zx_points[ind]->getY()); } diff --git a/modules/wechat_qrcode/src/wechat_qrcode.cpp b/modules/wechat_qrcode/src/wechat_qrcode.cpp index 596a72269..f4bec7c2b 100644 --- a/modules/wechat_qrcode/src/wechat_qrcode.cpp +++ b/modules/wechat_qrcode/src/wechat_qrcode.cpp @@ -144,10 +144,10 @@ vector WeChatQRCode::Impl::decode(const Mat& img, vector& candidate super_resolution_model_->processImageScale(cropped_img, cur_scale, use_nn_sr_); string result; DecoderMgr decodemgr; - vector> zxing_points; + vector> zxing_points, check_points; auto ret = decodemgr.decodeImage(scaled_img, use_nn_detector_, decode_results, zxing_points); if (ret == 0) { - for(unsigned int i=0; i points_qr = zxing_points[i]; for (auto&& pt: points_qr) { pt /= cur_scale; @@ -159,7 +159,28 @@ vector WeChatQRCode::Impl::decode(const Mat& img, vector& candidate point.at(j, 0) = points_qr[j].x; point.at(j, 1) = points_qr[j].y; } - points.push_back(point); + // try to find duplicate qr corners + bool isDuplicate = false; + for (const auto &tmp_points: check_points) { + const float eps = 10.f; + for (size_t j = 0; j < tmp_points.size(); j++) { + if (abs(tmp_points[j].x - points_qr[j].x) < eps && + abs(tmp_points[j].y - points_qr[j].y) < eps) { + isDuplicate = true; + } + else { + isDuplicate = false; + break; + } + } + } + if (isDuplicate == false) { + points.push_back(point); + check_points.push_back(points_qr); + } + else { + decode_results.erase(decode_results.begin() + i, decode_results.begin() + i + 1); + } } break; }