OpenCV4.0-Alpha动态二维码检测 小测试

1. 简述

今天重新编译了最新的OpenCV4.0,发现里面多了很多机器学习相关的内容,后面做相关开发更加方便了。看到了跨度QR二维码也刚发布,这个功能同自己平时开发非常近,就测了一下官方的demo

2. 测试

测试代码是官方的live_detect_qrcode.cpp, 代码如下:

//测试二维码功能
void CameraCalibration::QRCodeDetect(Mat &input, string & decoded_info)
{
    Mat gray_input;
    cv::cvtColor(input, gray_input, cv::COLOR_RGB2GRAY);
    Mat straight_barcode;
    vector<Point> transform;
    bool result_detection = false;

    QRCodeDetector qrcode;

    transform.clear();
    //检测二维码
    result_detection = qrcode.detect(gray_input, transform);
    if (!result_detection) { return; }
    else
    {
        DrawQRCodeContour(input,transform);
        //解析二维码中的信息
        decoded_info = qrcode.decode(gray_input, transform, straight_barcode);
        if (decoded_info.empty()) { return; }

        if (decoded_info.empty()) { std::cout << "QR code cannot be decoded\n"; decoded_info = "null";}
    }

}

//画出带二维码的区域
void CameraCalibration::DrawQRCodeContour(Mat &color_image, vector<Point> transform)
{
    if (!transform.empty())
    {
        double show_radius = (color_image.rows  > color_image.cols)
                ? (2.813 * color_image.rows) / color_image.cols
                : (2.813 * color_image.cols) / color_image.rows;
        double contour_radius = show_radius * 0.4;

        vector< vector<Point> > contours;
        contours.push_back(transform);
        drawContours(color_image, contours, 0, Scalar(211, 0, 148), cvRound(contour_radius));

        RNG rng(1000);
        for (size_t i = 0; i < 4; i++)
        {
            Scalar color = Scalar(rng.uniform(0,255), rng.uniform(0, 255), rng.uniform(0, 255));
            circle(color_image, transform[i], cvRound(show_radius), color, -1);
        }
    }
}

这里我简化了一下官方的代码,直接运行。 下面是运行的效果:
动态图

识别效果还可以,但是作为alpha版本,这个功能还有bug,识别一会儿之后,decode函数会莫名其妙的崩掉,测试了官方的demo也存在类似的问题。尝试了将图片进行缩小等动作均无效。。。无奈只能在github上提bug了。

要连续动态的使用这个功能,还有很多问题,但是单独一张已经有的图片检测,crash的几率会小很多。 另外,crash都是decode引起的,寻找二维码边框以及范围,还是没有问题的,decode可以使用自己的代码来实现,bug会少些。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值