diff --git a/modules/objdetect/src/qrcode.cpp b/modules/objdetect/src/qrcode.cpp index ef74a80393..8391aabf62 100644 --- a/modules/objdetect/src/qrcode.cpp +++ b/modules/objdetect/src/qrcode.cpp @@ -2958,7 +2958,12 @@ std::string ImplContour::decode(InputArray in, InputArray points, OutputArray st vector src_points; points.copyTo(src_points); CV_Assert(src_points.size() == 4); - CV_CheckGT(contourArea(src_points), 0.0, "Invalid QR code source points"); + if (contourArea(src_points) <= 0.0) + { + if (straight_qrcode.needed()) + straight_qrcode.release(); + return std::string(); + } QRDecode qrdec(useAlignmentMarkers); qrdec.init(inarr, src_points); diff --git a/modules/objdetect/test/test_qrcode.cpp b/modules/objdetect/test/test_qrcode.cpp index c49480d38f..2912d39028 100644 --- a/modules/objdetect/test/test_qrcode.cpp +++ b/modules/objdetect/test/test_qrcode.cpp @@ -470,7 +470,7 @@ TEST(Objdetect_QRCode_basic, not_found_qrcode) QRCodeDetector qrcode; EXPECT_FALSE(qrcode.detect(zero_image, corners)); corners = std::vector(4); - EXPECT_ANY_THROW(qrcode.decode(zero_image, corners, straight_barcode)); + EXPECT_NO_THROW(qrcode.decode(zero_image, corners, straight_barcode)); } TEST(Objdetect_QRCode_detect, detect_regression_21287)