【问题标题】:Can't detected bounding rect of id card无法检测到身份证的边界矩形
【发布时间】:2022-01-14 07:11:00
【问题描述】:

我想使用 OpenCV 检测图像中德国身份证的边界矩形。

这是我的代码的样子:

    capture >> frame;

   
    cv::resize(frame, frame, cv::Size(512,256));
    cv::Mat grayScaledFrame, blurredFrame, cannyFrame;
    cv::cvtColor(frame, grayScaledFrame, cv::COLOR_BGR2GRAY);
    cv::GaussianBlur(grayScaledFrame, blurredFrame, cv::Size(9,9), 1);

    cv::Canny(blurredFrame, cannyFrame, 40, 70);

    // CONTOURS
    std::vector<std::vector<cv::Point>> contours;
    cv::findContours(cannyFrame, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);

    // SORT
    int maxArea = 0;
    std::vector<cv::Point> contour;

    for(int i = 0; i < contours.size(); i++) {
        int thisArea = cv::contourArea(contours.at(i));
        if(thisArea > maxArea) {
            maxArea = thisArea;
            contour = contours.at(i);
        }
    }
    cv::Rect borderBox = cv::boundingRect(contour);

    cv::rectangle(cannyFrame, borderBox, cv::Scalar{255, 32, 32}, 8);
    cv::imshow("Webcam", cannyFrame);

结果如下所示: RESULT

检测到一些矩形,但不是我感兴趣的大矩形。 我已经尝试过 Canny 的不同阈值以及高斯模糊的不同内核大小。

最好的问候

【问题讨论】:

  • 每个人都试图从网络摄像头视频中检测卡片。其他人有什么不同,他们似乎有更好的结果?介绍您的文献综述

标签: c++ opencv computer-vision canny-operator


【解决方案1】:

首先,随着环境条件的变化,代码的参数也会发生变化,所以需要对环境进行标准化(光照、到物体的距离等)。 要正确进行此检测,请将​​卡片放在距相机固定距离的位置并计算矩形的面积。 当卡片距离相机一定距离时,您可以获得卡片区域的近似参考值。然后,在绘制矩形时,使用指定公差范围内的值。

【讨论】:

    猜你喜欢
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多