Skip to content

Commit de84cc0

Browse files
authored
Merge pull request #3350 from AleksandrPanov:wechat_remove_upscale
remove upscale from wechat
2 parents ce16ef9 + 4476b9b commit de84cc0

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

modules/wechat_qrcode/src/wechat_qrcode.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ int WeChatQRCode::Impl::applyDetector(const Mat& img, vector<Mat>& points) {
197197

198198
const float targetArea = 400.f * 400.f;
199199
// hard code input size
200-
const float tmpScaleFactor = scaleFactor == -1.f ? sqrt(targetArea / (img_w * img_h)) : scaleFactor;
200+
const float tmpScaleFactor = scaleFactor == -1.f ? min(1.f, sqrt(targetArea / (img_w * img_h))) : scaleFactor;
201201
int detect_width = img_w * tmpScaleFactor;
202202
int detect_height = img_h * tmpScaleFactor;
203203

modules/wechat_qrcode/test/test_qrcode.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,35 @@ TEST(Objdetect_QRCode_Big, regression) {
378378
ASSERT_EQ(expect_msg, decoded_info[0]);
379379
}
380380

381+
TEST(Objdetect_QRCode_Tiny, regression) {
382+
string path_detect_prototxt, path_detect_caffemodel, path_sr_prototxt, path_sr_caffemodel;
383+
string model_version = "_2021-01";
384+
path_detect_prototxt = findDataFile("dnn/wechat"+model_version+"/detect.prototxt", false);
385+
path_detect_caffemodel = findDataFile("dnn/wechat"+model_version+"/detect.caffemodel", false);
386+
path_sr_prototxt = findDataFile("dnn/wechat"+model_version+"/sr.prototxt", false);
387+
path_sr_caffemodel = findDataFile("dnn/wechat"+model_version+"/sr.caffemodel", false);
388+
389+
auto detector = wechat_qrcode::WeChatQRCode(path_detect_prototxt, path_detect_caffemodel, path_sr_prototxt,
390+
path_sr_caffemodel);
391+
392+
const cv::String expect_msg = "OpenCV";
393+
QRCodeEncoder::Params params;
394+
params.version = 4; // 33x33
395+
Ptr<QRCodeEncoder> qrcode_enc = cv::QRCodeEncoder::create(params);
396+
Mat qrImage;
397+
qrcode_enc->encode(expect_msg, qrImage);
398+
Mat tinyImage(80, 80, CV_8UC1);
399+
const int pixInBlob = 2;
400+
Size qrSize = Size((21+(params.version-1)*4)*pixInBlob,(21+(params.version-1)*4)*pixInBlob);
401+
Mat roiImage = tinyImage(Rect((tinyImage.cols - qrSize.width)/2, (tinyImage.rows - qrSize.height)/2,
402+
qrSize.width, qrSize.height));
403+
cv::resize(qrImage, roiImage, qrSize, 1., 1., INTER_NEAREST);
404+
405+
vector<Mat> points;
406+
auto decoded_info = detector.detectAndDecode(tinyImage, points);
407+
ASSERT_EQ(1ull, decoded_info.size());
408+
ASSERT_EQ(expect_msg, decoded_info[0]);
409+
}
381410

382411
} // namespace
383412
} // namespace opencv_test

0 commit comments

Comments
 (0)